c语言输出字符串数组出现乱码

定义一个二维数组后用for循环向输入寻求字符串赋值给数组 然后用for循环输出每个元素 为什么会在每行字符串最后出现一些乱码的情况

C语言字符串以'\0'结尾,如果不以该符号结尾则输出%s时会出错,程序一直往存放字符串的地址访问。而你的程序中并没有赋'\0'给那两个数组,所以会出现乱码。
没有出现乱码的数组是因为你初始化了,初始化时编译器会给它加上'\0'符号。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
字符串数组各字符单个赋值的话,你得主动在每串最后一个字符之后添加 '\0',表示串结束了,输入时就没有多余的乱码了,因为gets()或scanf() 的%s都是主动在串结束后添加了 '\0'的本回答被网友采纳
第2个回答  2013-04-12

字符串是以/0结束为标志的,出现乱码的话,应该是没有找到正确的/0或者,你把字符串的/0重新赋值了。


char str[] = "Hello, World !";
str[strlen(str)] = 4;//此时,字符串就被破坏,会输出乱码。

第3个回答  2014-12-12
由于hello 只有5个字节,而str循环中输出的是50个字节的内容,剩下的45字节的空间,都还没有初始化过。
访问未曾初始化的内存,就会出现意想不到的输出结果(不应该这么做)

所以修改for循环为
for(i =0; str[i] != '\0'; i++){
printf(XXX)
}
就可以了~ 其中'\0'是字符串的结束符。
第4个回答  2014-12-12
#include <stdio.h>

int main(void)

{

    int i = 0;

    char str[50];

    gets(str);

    while(str[i] != '\0')

    {     

  printf("%c",str[i]);

  i++;

    }

}

C语言中字符串以'\0'结尾,你这样循环50次把超过你输入的字符范围都读出来了。

相似回答