我想将文件1的内容完全照原样复制到文件2(保留空格和换行符)。我特别想一次将这些内容复制一小块字符(这是一个较大项目的一小部分,请耐心等待)。

我尝试了以下操作:

#include <stdio.h>
#include <stdlib.h>

#define MAX 5

int main(int argc, char *argv[]) {
    FILE *fin, *fout;
    char buffer[MAX];
    int length;
    char c;

    if((fin=fopen(argv[1], "r")) == NULL){
        perror("fopen");
        exit(EXIT_FAILURE);
    }

    if((fout=fopen(argv[2], "w")) == NULL){
        perror("fopen");
        exit(EXIT_FAILURE);
    }

    while(1){
        length = 0;
        while((c = fgetc(fin)) != EOF && length < MAX){
            buffer[length++] = (char) c;
        }
        if(length == 0){
            break;
        }
        fprintf(fout, "%s", buffer);
    }
    fclose(fout);
    fclose(fin);
}

但是,这会导致错误输出到我的file2。任何输入将不胜感激。

最佳答案

您的缓冲区不是零终止的。使用fwrite代替fprintf:

  fwrite(buffer, 1, length, fout);

而且您也应该检查错误。因此,比较fwritelength的返回码,如果不同,请重试写入剩余字节(如果为正),或者通过perror("fwrite")打印适当的错误消息(如果返回码为负)。

另外,您可以考虑以二进制模式打开文件,这会在Windows上造成差异,即将"rb""wb"传递给fopen

最后但并非最不重要的一点是,考虑一次使用fread而不是一次循环获取一个字符:
length = fread(buffer, 1, MAX, fin);

10-07 19:37
查看更多