问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用C语言编写文件为什么文件里是乱码?

发布网友 发布时间:2022-05-26 18:37

我来回答

4个回答

热心网友 时间:2023-10-17 12:19

第一个程序:
1. 你是想输入26个字母吧,那缓冲区长度不够,结尾要预留一个'\0'字符,char str[26] 至少要改成 char str[27]
2. 将字符输入文件时,不要写最后一个字符'\0', fwrite(str,1,27,fp) 改为 fwrite(str,1,26,fp); 原因是,文本文件当中是无须'\0'的,可能会导致乱码
3 字符读出来了之后,也要加上 str[26] = '\0' 语句

第二个程序:
1. 缓冲区不够, char str[26], 改为 char str[27]
2. 读取文件函数写错鸟,fwrite 改为 fread; 不要搞 fputs 了,文件是以"r"只读模式打开的
3 假使你把字符读出来了,也要加上 str[26] = '\0' 语句

#include<stdio.h>
#include<stdlib.h>
int main()
{
char str[100];
FILE *fp;
if((fp=fopen("字符串.dat","w"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
gets(str);
fwrite(str,1,26,fp);
fclose(fp);
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fread(str,1,26,fp);
str[26] = '\0';
printf("%s\n",str);
fclose(fp);
return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char str[100];
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fread(str,1,26,fp);
str[26]='\0';
printf("%s\n",str);
fclose(fp);
return 0;
}追问我把所有的26改为27
这样就不会出现缓冲区不够的问题了,也省去了str[26]='\0'
可以么?

追答不能省去str[26]='\0', 特别是第二个程序,缓冲区没有初始化,要是刚好 str[26] 不是 ‘\0’ ,字符串就没有结尾,后面跟着一堆乱码(当然,debug版本的VS会自动初始化倒是看不出来)

热心网友 时间:2023-10-17 12:19

char str[26];
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fwrite(str,1,26,fp);fputs("\n",fp);
str的初值在哪呢,你要写什麽进去呢,可不就是乱码了

你到底是读还是写fopen("字符串.dat","r") 以读方式打开
后面又是写fwrite(str,1,26,fp);fputs("\n",fp);追问后面应该是fread,这个没太注意,str不是在输入的时候给了字符串了么?可不可以不初始化啊?

追答改成fread我这读出来的就不是乱码了

热心网友 时间:2023-10-17 12:20

abcdefghijklmnopqrstuvwxyz
Press any key to continue

#include<stdio.h>
#include<stdlib.h>

int main()
{
FILE *fp;
char str[27]={0}; // 问题 一 长度不够 问题二 没有初始化
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");
exit(0);
}
fread(str,1,27,fp); //问题三 是fread 不是 fwrite 问题四 注意长度 27
printf("%s\n",str);
fclose(fp);
return 0;
}

热心网友 时间:2023-10-17 12:20

//后一个程序的
fwrite(str,1,26,fp);fputs("\n",fp); //这是写,不是读。
//改为
fread(str,1,26,fp);fputs("\n",fp);追问谢谢提醒,我改了,但是输出最后还是有乱码的,请教!!!

追答1 你第一个程序输入的时候字符数少点;
2 将fread(str,1,26,fp);fputs("\n",fp);中的26改为27。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
有效的教学激励策略有哪些 手机充电嗡嗡响怎么回事 手机在充电时发出嗡嗡作响 手机充电头快充有嗡嗡的声音 影视多媒体设计真的不好找工作吗 专科学影视多媒体技术好就业吗 影视多媒体技术专业就业怎么样 影视多媒体技术就业率 胆结石病人在输血后半个月,全身开始发痒是什么原因,怎样能够止痒呢?谢 ... 有关胆结石手术后的恢复,求教 LED灯杯为什么很多做成恒压12V输入的,大功率的灯珠不是恒流驱动好吗? c语言写入文件为什么会出现乱码的现象 恒流led电源做路灯合适吗?Led恒压电源特性怎样? LED灯用恒压电源问题 在c语言中用文件操作保存txt类型数据,用记事本打开成乱码了? LED供电到底是采用恒压电源还是恒流电源 c语言程序读入到txt文本文档后,显示为乱码,请问要怎么解决呢? C语言读入写出文件,写出文件时出现个别乱码。 产后什么可以吃什么不能吃 LED是恒流驱动好,还是恒压驱动好 月子餐禁忌与特点 产妇坐月子吃什么好 LED是用恒压led驱动器好还是恒流led驱动器好? c语言 txt文件怎么输出老是乱码 VT7.4打开不开机床 LED 的驱动恒流好,还是恒压好 恒压灯具是否用恒压驱动匹配就好了 LED是用恒流驱动好还是恒压驱动好 虎皮鹦鹉吃玉米不? 虎皮鹦鹉能吃干玉米碎粒吗 我是劳务派遣员工,与劳务派遣公司签订协议,并被派遣到当前公司,离职需要去那里开具离职证明 LED灯杯为什么很多做成恒压12V输入的,大功率的灯珠不是恒流驱动好吗? C语言读取TXT文件开头出现乱码 c语言关于文件的读写乱码问题 c语言关于文件的读写,为什么输出到文件上得到乱码 vivox9s为什么用着用着突然间分不了屏 设置也设置了,就是分不了 为什么呀? VIVOX9看着电视有微信消息不会分屏 怎样能让眉毛长得快 犀牛怎么没有上下移动的鼠标了 rhino4.0鼠标左键选中物体怎样设置才会不被随意移动? Rhino 中怎样让鼠标不贴着网格走 向大家请教个问题,在犀牛软件中,鼠标滚动键使用放大缩小的时候,不是一下子太大就是太小,请问这个能设_百度问一问 犀牛鼠标功能如何修改 在犀牛软件的二维建模时不知着i么的鼠标无法捕捉点,有根白线引到其它的点上。怎么处理?是什么问题? 求助,Rhino5.0安装TSpline4.0后,按鼠标中键无法弹出默认工具条,怎么回事?急! 国家基本劳动制度有哪些? 劳动分为哪几类 劳动法有哪些内容 十二星座专属古风名字(三) 读书郎怎样设置平板密码? 东航是哪?