首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

字符数组 "\0" 有关问题

2012-03-01 
字符数组 \0 问题!#includestdio.hintmain(void){charword1[]{ h , e , l , l , o , ! }charword2[]

字符数组 "\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 '哦~
乱码的原因是你数组长度没有定义,所以一直往后面找,直到找到为止
你可以给数组一个确定的长度哦!!!

热点排行