字符数组 "\0" 问题!
#include <stdio.h>
int main(void)
{
char word1[]={ 'h ', 'e ', 'l ', 'l ', 'o ', '! '};
char word2[]={ 'h ', 'e ', 'l ', 'l ', 'o ', '! ', '\0 '};
char word3[]={ 'h ', 'e ', 'l ', 'l ', 'o ', '! ', 'u '};
char word4[]={ 'h ', 'e ', 'l ', 'l ', 'o ', '! ', '\0 ', 'u '};
printf( "word1 %s\n ",word1);
printf( "word2 %s\n ",word2);
printf( "word3 %s\n ",word3);
printf( "word4 %s\n ",word4);
system( "pause ");
return 0;
}
word1 字符串数组的输出结果在 TC下是 hello!hello!
VS2005下是 hello!烫烫烫*** (****)代表乱码
word2 字符串数组的输出结果在 TC 和 VS2005下都是 hello!
word3 字符串数组的输出结果在 TC下是 hello!u
VS2005下是 hello!u烫烫*** (****)代表乱码
word4 字符串数组的输出结果在 TC下是 hello!
VS2005下是 hello!
请问这是为什么?
为什么会输出乱码?那个\0到底是怎么用地??
[解决办法]
字符串遇\0结束,word1和3没有\0,所以在vs2005下出现的是乱码。
[解决办法]
正确,是结束符。
但从你的输出看,两个编译器的行为与自己都不一致哦。更不要说两个之间了。
[解决办法]
没有\0,认为没有结束,而后面的内容是不可预测的。
[解决办法]
遇到\0就当是字符串结束了,所以后面的没有输出,如果没有遇到\0,就会输出这个字符数组的所有单元的值,而后面的值是不确定的,是随机的,所以出现乱码。
[解决办法]
你这四个数组是字符型的,每个元素都是字符,不是字符串数组。
而字符串数组末尾是自动赋 '\0 '的,所以你的1和3 没有手动增加 '\0 ',自然会出现乱码。
[解决办法]
%s 代表输出字符串...而在标准C里..字符串的结束标志是 '\0 '
如果没有就不代表是一个字符串了..就存在乱码
[解决办法]
所谓字符串,有个重要特征就是那个结束符 '\0 '。无它不成串啊:)
[解决办法]
%s 代表输出字符串...而在标准C里..字符串的结束标志是 '\0 '
你定义的仅是个数组哦 ,数组没有以‘\0’结束,
char word1[]= "aklgjlsjd ";才是正确的哦,自动加上了 '\0 '哦~
乱码的原因是你数组长度没有定义,所以一直往后面找,直到找到为止
你可以给数组一个确定的长度哦!!!