c语言中字符串的问题,求大神指教

怎么没有编译出错了。c在处理字符串的时候要在末尾自动加'\0',我只给数组分配了4个大小,为什么还可以往里面装4个字符?求大神指教

str[4]修改为str[5]

http://blog.csdn.net/guanyasu/article/details/51980692

C 里面的字符数组如果是手动构造的话一定要注意在最后加上 '\0',这不是语法上的要求,而是很多 C 内置的函数都依赖这个 '\0'。比如这个 printf() 函数

将str[4]改为str[5],因为tree后还有一个字节/0.

str[4]修改为str[5],C 里面的字符数组如果是手动构造的话一定要注意在最后加上 '\0',刚刚好存在数组溢出

1.如果你想定义字符串,改为 char str[5]="tree";
你在这里定义了一个字符串,内容是 tree ,虽然这里只有4个字节,但在定义字符串时需要多留一个字节的空间给 字符串结束符'\0'。
'\0'是由C编译系统自动加上的,不需要手动添加,只需要留出一个字节空间就行。
此时sizeof(str)应该是5,但strlen(str)是4(strlen不将'\0'计算在内)。
2.如果你想定义一个 字符型数组,此时不需要字符串结束符'\0',那么可写为 char str[4]={'t','r','e','e'};
此时sizeof(str)是4。

是数组的长度不够,定义的时候要小心,每个字符川输入的时候末尾上都会补上一个斜杠0,所以的定义的长度要再加一哦