正文
孙鑫c++文本编程出乱码,c++ char中文乱码
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
C语言fwrite写入文件后为什么出现乱码?
按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为乱码。例如float a=123467,写入文件后为4个字节,打开后不是文本表示的8个字节。写入数据用fprintf(fp,%s %s %d 这种方式。
从代码看,在Windows平台是有大概率会乱码,假如你的商品信息数组里存放了换行就一定会乱码。主要问题在文件的打开方式不对,fread, fwrite函数最好以二进制模式打开文件,即打开方式加上b,即(rb, wb)。
想要在用记事本打开以后不是乱码,必须fwrite的时候全部写入char型数据。而你的结构体里还有float型和指针类型,不应该盲目地直接用exc当fwrite的参数去写,而应该一项一项地把数据转成字符串,再fwrite到文件里。
出问题的原因是你ftell得到的长度和你fread实际读到的字节数不符,原因是windows把回车看作/r/n2个字符,ftell读的时候也按2个算,但是fread读的时候却算一个,就是\n ,这就导致你fwrite的时候比你fread到的要多。
在MSDN中fwrite的解释是Writes data to a stream.你写入的是int型的数组,以二进制存放在文件中,当你用文本文档打开的时候是当作字符串识别的,看到的就成了乱码。
fwrite(&s[i],sizeof(stu),1,fp);你这样是以二进制的形式将stu结构写入文件的。
c语言程序读入到txt文本文档后,显示为乱码,请问要怎么解决呢?_百度...
1、从代码看,在Windows平台是有大概率会乱码,假如你的商品信息数组里存放了换行就一定会乱码。主要问题在文件的打开方式不对,fread, fwrite函数最好以二进制模式打开文件,即打开方式加上b,即(rb, wb)。
2、可以先sprintf(str,%f,i),转成字符串,将str用fwrite写入文件。但这样再去读这些文件,需要再次将字符串转换成数字。
3、feof(fp)改成1,然后在fscanf那一句后面加一句if(feof(fp)) break;就可以了。
4、采用二进制方式将数据写到文件中,其实是将结构体所在的内存信息写到了文件里,所以里面会有一些乱七八糟的信息。通常我们通过这个操作来理解,结构体在内存中的存储情况和内存的使用情况。
5、把 char str[100];改成 static char str[100]; 因为函数的自动变量是存储在栈上的,当函数返回时,空间将被释放。所以会乱码。
C语言中指针读写文件,问什么记事本都是乱码,怎么改呢?
也有可能是输出文件编码问题,就是windows的记事本,不支持输出的文件的编码(MAC居多),你换一个编辑器看看,比如UltraEdit。
错误二:虽然w+的文件既允许读,又允许写,但读和写之间至少有一个移动文件指针的函数:fseek,哪怕移动0格,也必须要用fseek函数。
因为你是以二进制方式把结构体数据写到文件中,所以如果你用记事本打开来查看保存的文件,自然看到是乱码。只有你自己写的程序才可正确地读取和显示结果,当然你得写对。
关于孙鑫c++文本编程出乱码和c++ char中文乱码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。