
c语言文件写入fwrite() 和 _write()写12个字符会多一个,为什么?
#include<stdio.h>#include<stdlib.h>FILE*stream;intmain(){inti;charc[12];for(i=0;i<12;...
#include <stdio.h>
#include <stdlib.h>
FILE *stream;
int main()
{
int i;
char c[12];
for(i = 0; i < 12; i++)
c[i] = i;
stream = freopen("test.txt","w+",stderr);
fwrite(c,12,1,stream);
fclose(stream);
return 0;
}
用winhex查看就是13个字符,不知道为什么A那里会多一个??
这里50个字节是在第10个字节出错,如果一次写入更多的出错的地方在26个字节那里出错请问这是为什么呢?同样也是0D
用fread()读取的时候就会全部乱码,这个怎么解决呢? 展开
#include <stdlib.h>
FILE *stream;
int main()
{
int i;
char c[12];
for(i = 0; i < 12; i++)
c[i] = i;
stream = freopen("test.txt","w+",stderr);
fwrite(c,12,1,stream);
fclose(stream);
return 0;
}
用winhex查看就是13个字符,不知道为什么A那里会多一个??
这里50个字节是在第10个字节出错,如果一次写入更多的出错的地方在26个字节那里出错请问这是为什么呢?同样也是0D
用fread()读取的时候就会全部乱码,这个怎么解决呢? 展开
3个回答
展开全部
调用fwrite函数时,如果碰到换行符(0x0A),编译器会自动转换为回车换行符(0x0D 0x0A),然后写入文件。这样写入文件的数据就会与原始数据有差异。
追问
谢谢,明白了
展开全部
关于写的问题,1楼2楼解释和修改的很好,读的问题,是因为你写进去的是字符的assic码,比如c[1]=0,即assic码00被写进去文件,而00对应的字符是不可见的,所以读出来的就是乱码。
建议改为
for(i = 65; i < 67; i++)
c[i] = i;
试试,其中65代表的是字符‘A',以此类推
建议改为
for(i = 65; i < 67; i++)
c[i] = i;
试试,其中65代表的是字符‘A',以此类推
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-05-21
展开全部
stream = freopen("test.txt","w+",stderr);
改为stream = freopen("test.txt","wb+",stderr);
改为stream = freopen("test.txt","wb+",stderr);
追问
为什么会这样呢?写入更多字符的时候也是在10这里出问题?其他地方就不会
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询