读书人

怎样知道char*的里面有多少个string?

发布时间: 2012-04-02 19:58:59 作者: rapoo

怎样知道char**的里面有多少个string?(在线等)
e.g.
char *abc[] = {
"11 ", // 1
"23 ",
" ",
"44 ", // 2
"11 ",
0};

应该是有6个string
怎样得到6?

谢谢!!


[解决办法]
cout < <sizeof(abc)/sizeof(char*) < <endl;
[解决办法]
sizeof(abc)/sizeof(abc[0])应该可以吧?没测试。
[解决办法]
sizeof(abc)/sizeof(char*)
[解决办法]
for 循环找字符 '\0 '的个数n
结果因该是n-1

[解决办法]
如果得到的是 6,
那么使用sizeof(abc)/sizeof(char*)
(sizeof(数组名)/sizeof(数组元素类型)得到数组元素的个数)
[解决办法]
如果得到的结果是 5,
即需要得到有效元素的个数,
可以遍历数组判断指针得到 ~

通常,
这样的定义方式,
在末尾增加一个 0 元素,
多是为了作为一个 数组边界标志所用的 ~
[解决办法]
cout < < sizeof(*abc) / sizeof(int) < < endl;

这样就行了,abc里存的是指针,都是int型的。新来的,给点积分吧,呵呵
[解决办法]
只能求出字符指针数祖char * strArray[](也就是我们通常所说的字符串数组)里面包含的字符串的个数,
但不能求一个char ** strPointer里面包含的字符串的个数.

其实原因很简单,因为字符指针数组

char * strArray[] =
{ "abc ",
"def ",
" ",
" "
}
实际上是一个指针数组,这些指针指向一个字符,
也就是所
strArray[0] 指向 "abc "的第1个字符a
strArray[1] 指向 "def "的第1个字符b
strArray[2] 指向 " "的第1个字符 '\0 '
显然一个字符指针数组里含有的字符串个数
可以通过字符指针数组的总长度除以一个字符指针的长度得到

也就是
sizeof(strArray)/sizeof(char*);
你也可以用
sizeof(strArray)/sizeof(strArray[0]);
你甚至还可以用
sizeof(strArray)/sizeof(int *)因为指针的长度是确定的

而char ** strPointer;
实际上是指向一个地址
假设 strPointer = 0x0012ff64;
那么0x0012ff64位置上便是一个指向char *的指针
假设其值是0x0042201c,也就是说这个字符的地址是
0x0042201c



[解决办法]
//然后
int size= sizeof(test)/sizeof(char*);
为什么现在size就哪不到呢?只能返回 1,而不是6.
==============================================
数组作参数传递,只能退化为指针。所以sizeof(test)==test指针长度;传参数的结果

怎样得到6?
void function(char **test) //(char *test[])也一样。
{
char **p=test;
while(*p++);
int size=p-test;
}



[解决办法]
上面我已经讲到,其实 char ** test也是一个指针,所以
sizeof(test)的值在32位系统中也就是 4
而size of (char *)在32位系统中也是 4

所以得到的当然是1而不是6

读书人网 >C语言

热点推荐