fwrite写文件时为何总会多写一个0x0d呢?

leehh 2012-11-11 03:58:08
如下图:



左边的源文件是我直接保存的内存值,右边的是用fwrite函数写入的一个文件,对比了一下,发现有几处没有0x0d的位置都被写了一个0x0d的值,而且都是在0x0a之前。不知道为什么,请大家帮忙看看。
...全文
805 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
leehh 2012-11-22
  • 打赏
  • 举报
回复
引用 13 楼 samqsu_amba 的回复:
if ((fp = fopen( "a.bin", "r")) == NULL ) 改为 if ((fp = fopen( "a.bin", "rb")) == NULL )
的确是这样的,搞忘记上来回了,谢谢各位。
图灵狗 2012-11-16
  • 打赏
  • 举报
回复
那么提供一下你的完整源码和a.bin文件吧。
引用 11 楼 leehh 的回复:
效果是一样的 引用 10 楼 turingo 的回复:这一段, for(i=0;i<length;i++) { sprintf(&amp;tmparr[i],"%c",*(unsigned char *)(ptr+i)); } 直接换成memcpy(tmparr, ptr, length); 引用 9 楼 leehh 的回复:类型看起来也……
leehh 2012-11-16
  • 打赏
  • 举报
回复
效果是一样的
引用 10 楼 turingo 的回复:
这一段, for(i=0;i<length;i++) { sprintf(&tmparr[i],"%c",*(unsigned char *)(ptr+i)); } 直接换成memcpy(tmparr, ptr, length); 引用 9 楼 leehh 的回复:类型看起来也找不出是哪的问题,也没有溢出,不知道是哪不对。
samqsu_amba 2012-11-16
  • 打赏
  • 举报
回复
if ((fp = fopen( "a.bin", "r")) == NULL ) 改为 if ((fp = fopen( "a.bin", "rb")) == NULL )
图灵狗 2012-11-12
  • 打赏
  • 举报
回复
这一段, for(i=0;i<length;i++) { sprintf(&tmparr[i],"%c",*(unsigned char *)(ptr+i)); } 直接换成memcpy(tmparr, ptr, length);
引用 9 楼 leehh 的回复:
类型看起来也找不出是哪的问题,也没有溢出,不知道是哪不对。
leehh 2012-11-12
  • 打赏
  • 举报
回复
类型看起来也找不出是哪的问题,也没有溢出,不知道是哪不对。
转角天边 2012-11-11
  • 打赏
  • 举报
回复
类型转换出了问题吧
leehh 2012-11-11
  • 打赏
  • 举报
回复
我把相关的整理了一下,如下: main() { FILE *fp,*fb; unsigned int len=0,length=0; unsigned int i=0,j=0; char *pb=0; unsigned char *ptr; char *tmparr; if ((fp = fopen( "a.bin", "r")) == NULL ) { printf("ERROR: No Such File!\n"); fclose(fp); return 0; } else { fseek(fp,0,SEEK_END); length = ftell(fp); fseek(fp,0,SEEK_SET); } fb = fopen( "b.bin", "wb"); //´´½¨±£´æÊý¾ÝµÄÎļþ ptr = malloc(length); //ÉêÇëÄÚ´æ¿Õ¼ä memset((unsigned int)ptr,0xff,length); tmparr = malloc(length); memset((unsigned int)tmparr,0xff,length); fread((unsigned char *)ptr, 1,length,fp); //´ÓÎļþ¶ÁÈëÊý¾Ý fclose(fp); for(i=0;i<length;i++) { sprintf(&tmparr[i],"%c",*(unsigned char *)(ptr+i)); } fwrite(tmparr,sizeof(unsigned char),length,fb); fclose(fb); return 0; }
图灵狗 2012-11-11
  • 打赏
  • 举报
回复
这得看具体的代码。
引用 4 楼 leehh 的回复:
多谢上面两位兄弟的指点,但现在还有一点问题,为何写入文件的字节数只能到0xC000呢? 我测了一个128KB的内存数据,写到0xc000后面就全不对了。 malloc()函数申请的内存空间有问题么?
转角天边 2012-11-11
  • 打赏
  • 举报
回复
引用 4 楼 leehh 的回复:
多谢上面两位兄弟的指点,但现在还有一点问题,为何写入文件的字节数只能到0xC000呢? 我测了一个128KB的内存数据,写到0xc000后面就全不对了。 malloc()函数申请的内存空间有问题么?
那你改成VirtualAlloc函数试试
leehh 2012-11-11
  • 打赏
  • 举报
回复
多谢上面两位兄弟的指点,但现在还有一点问题,为何写入文件的字节数只能到0xC000呢? 我测了一个128KB的内存数据,写到0xc000后面就全不对了。 malloc()函数申请的内存空间有问题么?
转角天边 2012-11-11
  • 打赏
  • 举报
回复
0x0d是回车,0x0a是换行
图灵狗 2012-11-11
  • 打赏
  • 举报
回复 1
打开文件的时候用"wb"指定为二进制方式,否则为文本方式,在Windows下会加上0x0d,例如: tmparr = fopen("mpa.dat", "wb");
leehh 2012-11-11
  • 打赏
  • 举报
回复
下面是与此相关的部分函数语句: tmparr = malloc(length); memset((unsigned int)tmparr,0xff,length); fread((unsigned char *)ptr, 1,length,fp); //´ÓÎļþ¶ÁÈëÊý¾Ý fclose(fp); // memswap((unsigned int)ptr,length/4); //Ö´ÐÐswap²Ù×÷ for(i=0;i<length;i++) { sprintf(&tmparr[i],"%c",*(unsigned char *)(ptr+i)); } fwrite(tmparr,sizeof(unsigned char),length,fb);

70,020

社区成员

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

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