下面程序输出为什么不是10? 5C

#include
#include
typedef struct _data
{
int id;
char buff[10]l
}data_t;
int main()
{
data_t data;
char ch[10] = "0123456789";
printf("%d\n",strlen(ch));
return 0;
}

11个回答

 strlen的实现机制类似如下代码:
int strlen(char * p)
{
int n = 0;
while (*(p++) != '\0') n++;
return n;
}
所以因为你的程序没有\0,它会继续往下,直到遇到\0,结果不可预料。

strlen是以'\0'为标志来得到字符串的长度信息。你定义的char[10]没有存放这个'\0'标记。

输出是9吗……………………

StarsCCC
mxccc.cn 因为你的数组字符串没有结束符'\0',字符串越界所以不会输出10
4 年多之前 回复
hqyj15121
hqyj15121 回复zzsnow336: 输出的是16
4 年多之前 回复
z49434574
江尹城 回复zzsnow336: char[]的结尾会有一个终止符/0
4 年多之前 回复

输出是11 属于字符串越界

字符串越界了,把后边的“\0”给踩了, "0123456789"是存放字符串常量区域的,输出的是多少要看紧接着排在后面的下一个“\0”是什么时候出现了。

因为你的程序没有\0,它会继续往下,直到遇到\0,结果不可预料。

你要先弄懂strlen函数

你为ch赋值的元素过多了,应该要小于十个字符的字符串。这种情况他会找到计算机中ch后的第一个‘\0’并计算这之间的长度。

你定义的char[10]没有存放这个'\0'标记。

数组溢出了 ,字符串没有结束符'\0',strlen就会在存储str这个地址一直往后读,直达读到'\0'为止

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐