在c中复制.exe文件和文本文件的区别
发布时间:2020-12-16 09:37:36 所属栏目:百科 来源:网络整理
导读:我编写了以下代码将文本文件复制到另一个: FILE *fpr,*fpw; int ch; fpr = fopen("M.txt","r"); fpw = fopen("P.txt","w"); if(fpr == NULL) printf("File open failed!"); else { while(1) { ch = fgetc(fpr); if(ch == EOF) break; fputc(ch,fpw); } fclo
我编写了以下代码将文本文件复制到另一个:
FILE *fpr,*fpw; int ch; fpr = fopen("M.txt","r"); fpw = fopen("P.txt","w"); if(fpr == NULL) printf("File open failed!"); else { while(1) { ch = fgetc(fpr); if(ch == EOF) break; fputc(ch,fpw); } fclose(fpr); fclose(fpw); printf("Successfully copied!"); } 它工作得很好.然后我改变了int ch to char ch它也适合我.但是,当我使用以下代码复制.exe文件时,文件复制无法正常工作. FILE *fpr,*fpw; char ch; fpr = fopen("M.exe","rb"); fpw = fopen("P.exe","wb"); if(fpr == NULL) printf("File open failed!"); else { while(1) { ch = fgetc(fpr); if(ch == EOF) break; fputc(ch,fpw); } fclose(fpr); fclose(fpw); printf("Successfully copied!"); } 我将char ch更改为int ch然后它工作正常!为什么在没有文本文件的二进制文件中发生这种情在二进制的情况下使用char ch时会发生什么? 解决方法
这是因为对于char来说EOF可能是0或255,它可以出现在二进制文件的中间但不能出现在文本文件中(这就是为什么只有文本文件才能用于char).但是对于int,EOF为-1,无论如何都不能显示在文件的中间(只有0-255包含).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- oracle如何合并多个sys_refcursor详解
- ruby – 如何在特征类中使模块常量也可见?
- Oracle OCP笔记(30)数据库恢复
- 自己写的输出xml和json的几个方法,和WebService,jquery aj
- c# – 关于继承和运算符重载的OOP设计问题
- ruby – 如何在Docker中正确安装RVM?
- 托管 AJAX 能否让 Web 应用程序提速?
- c – 如何确定字符串是否包含在std :: vector的任何字符串中
- postgresql – 在pg_restore中,如何使用postgres连接字符串
- ruby-on-rails-3 – 在rails动作中启动Watir-Webdriver