我会将代码删除到我遇到问题的部分 .
当我执行以下操作时,代码可以正常工作
int main() {
FILE * fptr1 = fopen("in.txt", "r");
fread(data, sizeof(char), size, fptr1);
.
.
.
FILE * fptr2 = fopen("out.txt", "w");
fwrite(data, sizeof(char), size, fptr2);
fclose(fptr2);
}
但是当我使用fgets使用fgets或scanf获取输入和输出文件名时,我会遇到分段错误 .
int main() {
char inputfile[100];
char outputfile[100];
printf("name of input file: \n");
fgets(inputfile, 100, stdin);
printf("name of output file: \n");
fgets(outputfile, 100, stdin);
.
.
.
}
我已经玩了一段时间了 . 我尝试使用scanf并尝试更改inputfile和outputfile的已分配大小但我一直得到:
Segmentation fault (core dumped)
2 回答
使用
fgets()
,生成的文件名inputfile
和outputfile
包含终止换行符 . 它导致以下fopen()
失败并返回NULL
.但是,在调用
fread()
或fwrite()
之前,您没有检查FILE*
的无效,这导致了分段错误 .使用
fgets()
输入的字符串包含终止'\n',这通常是意外的 . 虽然这不会直接导致段错误,但可能会导致fopen()
返回NULL
,因为它无法找到该文件 . 尝试从空文件指针读取数据将导致段错误 .加
在你的
fopen()
陈述之后 .