我想将文件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);
而且您也应该检查错误。因此,比较
fwrite
和length
的返回码,如果不同,请重试写入剩余字节(如果为正),或者通过perror("fwrite")
打印适当的错误消息(如果返回码为负)。另外,您可以考虑以二进制模式打开文件,这会在Windows上造成差异,即将
"rb"
和"wb"
传递给fopen
。最后但并非最不重要的一点是,考虑一次使用
fread
而不是一次循环获取一个字符:length = fread(buffer, 1, MAX, fin);