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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言输出字符串数组出现乱码相关的知识,希望对你有一定的参考价值。

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

C语言字符串以'\0'结尾,如果不以该符号结尾则输出%s时会出错,程序一直往存放字符串的地址访问。而你的程序中并没有赋'\0'给那两个数组,所以会出现乱码。
没有出现乱码的数组是因为你初始化了,初始化时编译器会给它加上'\0'符号。
参考技术A 字符串数组各字符单个赋值的话,你得主动在每串最后一个字符之后添加 '\0',表示串结束了,输入时就没有多余的乱码了,因为gets()或scanf() 的%s都是主动在串结束后添加了 '\0'的 参考技术B

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


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

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

所以修改for循环为
for(i =0; str[i] != '\0'; i++)
printf(XXX)

就可以了~ 其中'\0'是字符串的结束符。
参考技术D #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次把超过你输入的字符范围都读出来了。

int数组和char数组的问题

int a[]=1,2,3,4输入的是地址。。。
但是 char a[]='H','e','r','o'
输出的却是Hero加乱码

这是为什么?

附:如果能告诉我为什么会出现中文乱码就更好了,如果是因为没有结尾符,直接就禁止编译就好了啊

是因为没有结尾的'\0'
字符串后面的部分内存内容存放的代码恰好是中文字符 所以就显示中文了
记得我以前调试程序的时候经常出现“烫”这个字 呵呵
参考技术A char数组是特殊处理的。 禁止编译?。。编译器的能力是有限的, 程序的对错更多时候必须依靠程序员自己来判断。 参考技术B char a[]='H','e','r','o';
你作为整型数组声明的
打印:
int i;
for (i=0;i<4;i++) printf("%c",a[i]);

for (i=0;i<4;i++) printf("%d ",a[i]);

以上是关于c语言输出字符串数组出现乱码的主要内容,如果未能解决你的问题,请参考以下文章

C语言 字符串输出时最后出现乱码

C语言 字符串输出时最后出现一个乱码 在线等

C语言字符串输出乱码

c语言输出字符串为啥是乱码?

c语言 输出char类型 乱码

C语言,字符串输出是乱码