#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;
}
输出是9吗……………………
输出是11 属于字符串越界
字符串越界了,把后边的“\0”给踩了, "0123456789"是存放字符串常量区域的,输出的是多少要看紧接着排在后面的下一个“\0”是什么时候出现了。
strlen的实现机制类似如下代码:
int strlen(char * p)
{
int n = 0;
while (*(p++) != '\0') n++;
return n;
}
所以因为你的程序没有\0,它会继续往下,直到遇到\0,结果不可预料。
因为你的程序没有\0,它会继续往下,直到遇到\0,结果不可预料。
你要先弄懂strlen函数
strlen是以'\0'为标志来得到字符串的长度信息。你定义的char[10]没有存放这个'\0'标记。
你为ch赋值的元素过多了,应该要小于十个字符的字符串。这种情况他会找到计算机中ch后的第一个‘\0’并计算这之间的长度。
你定义的char[10]没有存放这个'\0'标记。
数组溢出了 ,字符串没有结束符'\0',strlen就会在存储str这个地址一直往后读,直达读到'\0'为止
数组当字符串用,一般不会这么用的!你应该定义成字符型指针,而不是数组。