以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  求数组长度  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=40398)


--  作者:fangel2000
--  发布时间:11/22/2006 10:39:00 PM

--  求数组长度
我想在一个函数中求一个数组的长度

void  testPalindrome(char s[])
{
int length = 0;
while (s[length])
    length++;
cout<<length<<endl;
}

为什么这样的代码不可以呢,不行的话那应该怎样写呢?


--  作者:卷积内核
--  发布时间:11/23/2006 9:06:00 AM

--  
上面应该去掉s[length]=="/0"的情况。
可以直接这么写:

int length(int s[])
{
    return sizeof(s[])/sizeof(s[0]);
}


--  作者:fangel2000
--  发布时间:11/23/2006 10:06:00 AM

--  
哦,谢谢了
--  作者:flyhigher
--  发布时间:12/9/2006 6:46:00 PM

--  
int length(int s[])
{
    return sizeof(s[])/sizeof(s[0]);
}
这样好行不行吧。
不知道这位大虾用的什么编译器,反正 vc好像编译不通过。


--  作者:longshentailang
--  发布时间:12/9/2006 9:17:00 PM

--  
return sizeof(s[])/sizeof(s[0]);

应该改为

return sizeof(s)/sizeof(s[0]);
而且这样改的话,算出的也不是数组的长度。

因为在函数中,数组参数退化为指针,而指针的大小为4个字节。比如下面的内容永远输出为4

void fun(char  a[1000])
{
   count<<sizeof(a)<<endl;  //输出4而不是1000
}


--  作者:longshentailang
--  发布时间:12/9/2006 9:23:00 PM

--  
我不知道你那段代码具体出了什么错,但我测试的时候你那个函数是对的。你是否可以贴一下你的完整代码?

我的测试用例如下:(测试环境:VC++ 6.0 和 Dev-C++ 4.9.9.2)

#include <iostream>

using namespace std;

void testPalindrome(char s[])
{
 int length = 0;
 while (s[length])
  length++;
 cout<<length<<endl;

}

int main(void)
{
 char a[] = "Hello00000";
 testPalindrome(a);
}


--  作者:fangel2000
--  发布时间:12/10/2006 5:35:00 PM

--  
呵呵,这个算法我刚也验证过了,是正确的,
但是很迷惑的是上次出错了,我也不知道出现什么问题了.呵呵
--  作者:flyhigher
--  发布时间:12/10/2006 5:42:00 PM

--  
我觉得关键是实参的最后一个有效字符之后是否有'\0'
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms