c语言strlen函数问题

#include <stdio.h>
#include <string.h>

void main()
{
char x[]={0xBC,0xDD,0xCA};
int len=strlen(x);
printf("%d\r\n",len);
}
输出结果怎么是7?!应该是3啊

第1个回答  2011-09-19
这个程序本身是有问题的,可以放到C++软件中去运行一下。0X代表十六进制,可能不算,那这样就是BCDDCA\O.
第2个回答  推荐于2017-10-09
strlen实际上是,从参数表示的地址往后找,找到第一个'\0',即串尾。然后计算'\0'至首地址的“距离”,即隔了几个字符,从而得出长度。
char x[]={0xBC,0xDD,0xCA};中,实际上是定义了一个char型的数组,而由于x[0],即0xBC开始往后找,一直到0xCA,都没'\0',所以会继续往后。。。当然,实际上往后找到的是其他值。。。
改char x[]={0xBC,0xDD,0xCA,0x00};后,应该就是3了。。。本回答被提问者采纳
第3个回答  2011-09-19
我的fedora输出是6,你的问题有问题。
应该这样。
#include <stdio.h>
#include <string.h>

void main()
{
char x[]={0xBC,0xDD,0xCA,0x0};
int len=strlen(x);
printf("%d\r\n",len);
}
这样才是3.哪有string不带0x0的。
第4个回答  2011-09-19
strlen函数的原理你都搞错了,其原型应该是这样的:int strlen(char *);它接受的是一个char*类型的参数,真不晓得你的这个是怎么传递进去的。 strlen计算字符串的长度例如"abc"的长度是3.但是实际上如果将其放到字符数组中的话,应该占4个元素。因为字符串是以字符'\0'结尾的,但是这个'\0'在我们的字符串是隐藏的,我们看不到。实际上是有的.例如:

char a[4]="abc";//这里数组的元素个数至少应该是4,否则此字符串不叫字符串了,只能叫字符数组了。

strlen判断一个字符串的结束就是以其末尾的'\0'为界限。其实现代码可以模拟为以下:
int strlen(char *p)
{
int i=0;
while(*p++)i++;
return i;
}

而你的数组没有正常的终止条件,所以strlen 出问题了,

#include <stdio.h>
#include <string.h>

void main()
{
char x[3]={0};
x[0]='a';
x[1]='b';
x[2]='c';
int len=strlen(x);
printf("%c %d \r\n",x[6],len);
}
把代码改成这样,就可以看出在执行strlen的时候,x的内容变了,具体原理参考源代码

你在用右键查看定义就可以找到了,
在VC98\Include\STRING.H 文件里有
size_t __cdecl strlen(const char *);

你要注意一下,strlen是标准C库函数,不是C++的库函数,
你可以在strlen前面发现有,
extern "C" {
这表明括号里面的是C语言写的函数
你的程序里 char占
第5个回答  2011-09-19
应该char x[]={0xBC,0xDD,0xCA,'\0'};
相似回答