c - 在c中复制.exe文件和文本文件的区别

标签 c file text binary copy

我写了下面的代码来将文本文件复制到另一个:

     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 更改为 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 可以)。

关于c - 在c中复制.exe文件和文本文件的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670510/

相关文章:

c - 初始化函数指针的全局数组

c - C 中带括号的指针

excel - 在 Excel 中将文本转换为数字格式

c++ - 当使用 memcpy 将包含 vector 的结构复制到其中时,为什么 Char* 的长度 = 1。我们有替代方法吗

c - 在其他线程执行 mutex_unlock() 之后,等待互斥体的线程是否会立即获得所有权?

c - 文件系统性能

java - Java从csv文件读取数据

c# - 检查服务器上是否存在文件

html - 如何在 CSS 中将文本列居中

text - 如何在 postscript 文件中写入弧形文本