
正文
c语言string输出乱码,c语言string类型输入
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
c语言输出字符串数组出现乱码
C语言字符串以\0结尾,如果不以该符号结尾则输出%s时会出错,程序一直往存放字符串的地址访问。而你的程序中并没有赋\0给那两个数组,所以会出现乱码。
这是C语言习惯,务必养成!\x0d\x0a\0是字符串结束符,每当解释器看到这\0才会认为字符串终止,而你的程序明显没有字符串结束符,所以连同垃圾内存一起读出来了。“烫烫。”等就是垃圾内存。
都还没有初始化过。访问未曾初始化的内存,就会出现意想不到的输出结果(不应该这么做)所以修改for循环为 for(i =0; str[i] != \0; i++){ printf(XXX)} 就可以了~ 其中\0是字符串的结束符。
是你的for (i = 0; i = len; i++),多输出了一个字符,改成for (i = 0; i len; i++)即可,记住C中数组都是从0开始数的。
相关问答
Q1: C语言数组输出出现乱码
printf(XXX)} 就可以了~ 其中\0是字符串的结束符。
C语言字符串以\0结尾,如果不以该符号结尾则输出%s时会出错,程序一直往存放字符串的地址访问。而你的程序中并没有赋\0给那两个数组,所以会出现乱码。
int time = { 1 };unsigned int k = { 0 };这两句不符合C语言语法吧,大括号一般很少用的,一般用在数组上,但是你的变量明显不是数组啊。
这个与数据在计算机中的存储有关系,同时也与printf函数有关系,修改为printf(%d,%f\n,(int)fVar,(double)iVar);也是OK的,具体为什么会出错我也说不清楚。建议使用到类型转化的时候就强制转换一下,以免出问题。
另外,最后你打印结果的时候也需要使用循环语句,数组无法整体打印,只能逐个打印内部的元素。
如果你输入的是:100,xiao,guangzhou 那么执行后的结果是:p1-num:100 p1-name:xiao,guangzhou p1-bthplc:(未初始化,数据不可知)由于p1-bthplc未初始化,所以会有乱码出现。
Q2: c语言:这个程序为什么输出来是一堆乱码?
这个错误的原因是对union的定义不清楚,联合的意思是几个成员共用一个内存空间,但是每个时刻只能有一个成员占用。
也有可能是输出文件编码问题,就是windows的记事本,不支持输出的文件的编码(MAC居多),你换一个编辑器看看,比如UltraEdit。
这是C语言习惯,务必养成!\x0d\x0a\0是字符串结束符,每当解释器看到这\0才会认为字符串终止,而你的程序明显没有字符串结束符,所以连同垃圾内存一起读出来了。“烫烫。”等就是垃圾内存。
你这个乱码,你的文件里,学号长度为10个字节,所以你定义学号这个变量时,必须定义11个字节的长度,因为字符串的变量,必须要有一个\0作为结束,不然的话,显示的时候,没有结束符就会接着往下显示,就会有乱码出现。
全部调用 gets 函数,一次回车输入一行,而不是全部用 scanf来做。至于乱码,是因为最后一个字符串变量没有初始化,于是后面没有\0,程序把内存中的乱码写进文件,直到偶然遇到\0为之。这样的程序是不稳定的。
这种情况多数是由于操作系统的语言选项不正确引起的。建议你查看一下控制面板中的区域和语言选项,特别是有关“非Unicode程序的语言”,一定要选择成“中文(简体,中国)”。然后重启电脑。
关于c语言string输出乱码和c语言string类型输入的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








