所以我试图从一个文件(ride.in)读取输入,用它进行计算,并将结果打印在另一个文件(ride.out)中 . 当我尝试使用fscanf的第一个文件时,它工作正常 . 当我使用printf进行打印时,它也有效 . 但是,当我尝试使用fprintf写入文件时,它无法工作,导致分段错误:11 . 这怎么可能?
有效的代码:
#include <stdio.h>
#include <stdlib.h>
int main () {
FILE *fin = fopen ("ride.in", "r");
FILE *fout = fopen ("ride.out", "w");
char UFO[6], group[6];
fscanf(fin, "%s", UFO);
int sumUFO = 0, sumGroup = 0;
for(int i = 0; i < 6; i++){
sumUFO += (int) UFO[i];
}
fscanf(fin, "%s", group);
for(int i = 0; i < 6; i++){
sumGroup += (int) group[i];
}
fclose(fin);
if(sumUFO == sumGroup)
printf("GO");
else
printf("STAY");
exit (0);
}
但是,当我将最后一个if语句更改为使用fprintf而不是printf时,我得到一个分段错误:11 . 这是最后一个if语句 . 没有其他任何改变:
if(sumUFO == sumGroup)
fprintf(fout,"GO");
else
fprintf(fout,"STAY");
输入ride.in目前看起来像:
AAAAAA
AAAAAA
输出ride.out当前是一个空文本文件 .
2 回答
您正在将6个字符的字符串读入6个字符的数组中 . 使您的数组更大,以便终止null . 此外,对于fscanf,“%6s”将是一个更安全的格式说明符(否则,如果输入文件格式错误,则存在缓冲区溢出的风险) .
这是代码=>
在这段代码中fprintf()工作正常....