首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

1.在不用容器的情况下,如何在函数内[包括类的成员函数],求出string数组的长度

2012-02-26 
1.在不用容器的情况下,怎么在函数内[包括类的成员函数],求出string数组的长度?代码如下#include iostream

1.在不用容器的情况下,怎么在函数内[包括类的成员函数],求出string数组的长度?
代码如下
#include <iostream>
#include <string>
using namespace std;



int size(string *str)
{
int length=0;
length = sizeof(str)/sizeof(string); //失效,始终是0,可以看反汇编
cout<<"size = "<<length<<endl;
cout<<"str[0]="<<str[0]<<"str[1]"<<str[1]<<endl;
return length;
}


int main()
{
string pooh[] = {"winn","jone"};

int length = sizeof(pooh)/sizeof(string);
cout<<size(pooh)<<"length ="<<length;
return 0;
}



[解决办法]
你要干吗?

str->size()
str->length()
你到底要啥
[解决办法]
没法获得,传过去的知识一个指针
[解决办法]
length = sizeof(str)/sizeof(string);
str - 指针 - sizeof(str) == 4
string - 类 - sizeof(string) == 16 
结果肯定恒为0

int size(string *str) 
数组名做参数,传递进去,退化成指针,数组大小的信息丢失
没办法,一般数组名做参数,同时把数组的大小做参数传入
[解决办法]
template<class T ,int x>
int size(T (&str)[x] )
{
return x;
}
int main()
{
string pooh[] = {"winn","jone"};

int length = sizeof(pooh)/sizeof(pooh[0]);
cout << size( pooh) <<"length =" <<length; 

printf("%d\n",(short*)NULL+10);
return 0;
}
[解决办法]
不可能实现的
数组传递到函数会退化成指针
sizeof str == 4

[解决办法]
是的。3楼说的有道理。最好把数组的大小同时传过去。。int size(string *str,const int n)
[解决办法]
13楼是利用了编译器的 template argument deduction 模版实参推演
想弄清楚,自己看函数模版去吧

热点排行