使用fwrite()在C中逐字节写入文件

时间:2012-10-21 21:26:43

标签: c linux

我正在尝试逐字节读取文件并将其写入另一个文件。我有这段代码:

if((file_to_write = fopen(file_to_read, "ab+")) != NULL){

  for(i=0; i<int_file_size; i++){
    curr_char = fgetc(arch_file);

    fwrite(curr_char, 1, sizeof(curr_char), file_to_write);
  }
}

其中int_file_size是我想要读取的字节数,arch_file是我正在读取的文件,而curr_char是一个字符指针。

然而,这不起作用。我在循环的第一次迭代中得到Segmentation fault(core dumped)错误。我很确定我的fwrite()语句有问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:8)

您应该传递curr_char地址,而不是curr_char本身:

fwrite(&curr_char, 1, sizeof(curr_char), file_to_write);
//     ^------ Here

答案 1 :(得分:4)

  

curr_char是一个字符指针。

在那种情况下,

curr_char = fgetc(arch_file);

错了。您隐含地将int返回的fgetc转换为char*,然后在fwrite中,该值被解释为地址,{{1}尝试读取和写入文件。

如果sizeof(char*)指向为curr_char分配的内存,

char

将更接近正确性。但*curr_char = fgetc(arch_file); fwrite(curr_char, 1, sizeof *curr_char, file_to_write); 因某种原因而返回fgetc而非int,可能会失败,在这种情况下会返回char。所以你应该

EOF

对文件读取错误做出反应。