请教 数组'\0' 问题
声明一个字符数组
char str[] = { 'a ', 'b ', 'c ', 'd '};
然后从数组第0个元素开始判断是否 == '\0 '
如果不为 '\0 ' 则输出打印
但是结果除了abcd以外还有五个乱码,这是怎么回事?
如果改为 char str[50] = { 'a ', 'b ', 'c ', 'd '}; 则正常只输出abcd
完整源码:
#include <stdio.h>
void main() {
char str[] = { 'a ', 'b ', 'c ', 'd '};
char c;
int i = 0;
while(c=str[i]!= '\0 ') {
printf( "%c\n ",str[i]);
i ++;
}
}
[解决办法]
char str[] = { 'a ', 'b ', 'c ', 'd '};
只申请了4个空间,分别对应str[0]-str[3],接着str[3]后面的连续内存中你并不知道存放的是什么。按照你运行的结果可以知道,第10个内存空间是0,所以结束显示
char str[50] = { 'a ', 'b ', 'c ', 'd '};
是申请50个空间,你初始化abcd以后其他空间会自动帮你初始化为0
[解决办法]
char str[] = { 'a ', 'b ', 'c ', 'd '};
这个数组没有结束符。只有abcd
char str[50] = { 'a ', 'b ', 'c ', 'd '};
由于你的字符数小于数组长,编译器会帮你添加0进去。所以这个数组可以结束。
[解决办法]
char str[] = "abcd "
[解决办法]
char str[] = { 'a ', 'b ', 'c ', 'd ', '\0 '};