我正在尝试逐字节读取文件并将其写入另一个文件。我有这段代码:
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()语句有问题。任何帮助将不胜感激。
答案 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
对文件读取错误做出反应。