关于文件读写,出现乱码的问题,能否给出解释

mishisanyi 2012-12-24 02:18:21
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
struct data
{
int depart_num;
long people_num;
char people_name[10];
int people_age;
}peo_data[20];
void fileread()
{
int i;
FILE *fpwriter;
if((fpwriter=fopen("/home/root1/out.txt","r"))==NULL)
{
printf("没有此文件\n");
}
for(i=0;i<20;i++)
{
fscanf(fpwriter,"%4d,%5ld,%10s,%2d",&peo_data[i].depart_num,&peo_data[i].people_num,peo_data[i].people_name,&peo_data[i].people_age);
}
fclose(fpwriter);
} //从文件中读取数据
void filewrite()
{
int i;
FILE *fpreadr;
if((fpreadr=fopen("/home/root1/outlong.txt","w"))==NULL)
{
printf("没有此文件\n");
exit(0);
}
for(i=0;i<20;i++)
fprintf(fpreadr,"%4d,%5ld,%10s,%2d",&peo_data[i].depart_num,&peo_data[i].people_num,peo_data[i].people_name,&peo_data[i].people_age);
fclose(fpreadr);
}
void main()
{
fileread();
filewrite();
}
...全文
157 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
PIE 2012-12-24
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode:0x4A 0x55,UTF-8:0xE5 0x95 0x8A 推荐使用WinHex软件查看文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r……
还是赵老师深刻
小黑9009 2012-12-24
  • 打赏
  • 举报
回复
不知道楼主是不是笔误,你写的和读的文件都不一样,一个是out.txt,一个是.outlong.txt 还有在写的时候,fprintf函数里面的那些变量为什么要加&呢,如果加取地址符的话,你写进去的就是乱码。
赵4老师 2012-12-24
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode:0x4A 0x55,UTF-8:0xE5 0x95 0x8A 推荐使用WinHex软件查看文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
mishisanyi 2012-12-24
  • 打赏
  • 举报
回复
最开始,我就用的fread/fwrite,但是我要对peo_data这个数组进行排序,出现了错误。
xxb249 2012-12-24
  • 打赏
  • 举报
回复
为什么不用fread/fwrite 这两个函数呢?? 乱码问题一般是这样的 1.读取的是乱码 --- 读取完后 先输出buf 看一下 2.写入格式不对 --- 写之前看一下buf

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧