gpt4 book ai didi

c - 在C中逐 block 读取文件

转载 作者:行者123 更新时间:2023-12-02 01:27:49 26 4
gpt4 key购买 nike

我想将 file1 的内容原封不动地复制到 file2(保留空格和换行符)。我特别想一次将这些内容复制一小块字符(这是一个较大项目的一小部分,请耐心等待)。

我尝试了以下操作:

#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);
}

但是,这会导致我的文件 2 的输出不正确。任何输入将不胜感激。

最佳答案

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

  fwrite(buffer, 1, length, fout);

你也应该检查错误。因此,将 fwrite 的返回码与 length 进行比较,如果不同,则重试剩余字节的写入(如果为正)或通过 perror("fwrite")(如果返回码为负)。

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

最后但同样重要的是,与其循环并一次获取一个字符,不如考虑使用 fread:

length = fread(buffer, 1, MAX, fin);

关于c - 在C中逐 block 读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36083231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com