• 全部
  • 问答

怎样知道char**的里面有多少个string?(在线等)

wwtmw 2007-04-01 04:21:25
e.g.
char *abc[] = {
"11", // 1
"23",
"",
"44", // 2
"11",
0};

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

谢谢!!
...全文
288 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wwtmw 2007-04-01
Thanks HewpKanXue,

char **p=test;
while(*p++);
int size=p-test;

It works.
回复
wwtmw 2007-04-01
谢谢各位!给分!
回复
hzhiyang84 2007-04-01
是个难题,呵呵
回复
hzhiyang84 2007-04-01
上面我已经讲到,其实 char ** test也是一个指针,所以
sizeof(test)的值在32位系统中也就是 4
而size of (char *)在32位系统中也是 4

所以得到的当然是1而不是6
回复
HewpKanXue 2007-04-01
//然后
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;
}


回复
hzhiyang84 2007-04-01
只能求出字符指针数祖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




回复
wwtmw 2007-04-01
接:

void function(char **test) //(char *test[])也一样。
{
//然后
int size= sizeof(test)/sizeof(char*);

为什么现在size就哪不到呢?只能返回 1,而不是6.

}

谢谢!!
已经加分到40。
回复
wwtmw 2007-04-01
谢谢回复, sizeof(abc)/sizeof(char*) 可以 得6,

但是现在问题是我把 abc 传到函数
int main()
{
char *abc[] = {
"11", // 1
"23",
"",
"44", // 2
"11",
0};

function(abc);
}


void function(char **test) //(char *test[])也一样。
{
//然后
int size= sizeof(tiles)/sizeof(char*);

为什么现在size就哪不到呢?

}

谢谢!!
我会加分。
回复
elsove812 2007-04-01
cout << sizeof(*abc) / sizeof(int) << endl;

这样就行了,abc里存的是指针,都是int型的。新来的,给点积分吧,呵呵
回复
jixingzhong 2007-04-01
如果得到的结果是 5,
即需要得到有效元素的个数,
可以遍历数组判断指针得到 ~

通常,
这样的定义方式,
在末尾增加一个 0 元素,
多是为了作为一个 数组边界标志所用的 ~
回复
jixingzhong 2007-04-01
如果得到的是 6,
那么使用sizeof(abc)/sizeof(char*)
(sizeof(数组名)/sizeof(数组元素类型)得到数组元素的个数)
回复
Arthur_ 2007-04-01
for 循环找字符'\0'的个数n
结果因该是n-1
回复
hellox 2007-04-01
sizeof(abc)/sizeof(char*)
回复
ytfhwfnh 2007-04-01
sizeof(abc)/sizeof(abc[0])应该可以吧?没测试。
回复
believefym 2007-04-01
cout<<sizeof(abc)/sizeof(char*)<<endl;
回复
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2007-04-01 04:21
社区公告
暂无公告