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

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

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

谢谢!!
...全文
356 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Thanks HewpKanXue,

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

It works.
  • 打赏
  • 举报
回复
谢谢各位!给分!
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




  • 打赏
  • 举报
回复
接:

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

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

}

谢谢!!
已经加分到40。
  • 打赏
  • 举报
回复
谢谢回复, 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;

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧