所以我试图从一个文件(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时,我得到一个Segmentation Fault:11。这是最后一个if语句。没有其他任何改变:
if(sumUFO == sumGroup)
fprintf(fout,"GO");
else
fprintf(fout,"STAY");
输入ride.in目前看起来像:
AAAAAA
AAAAAA
输出ride.out目前是一个空文本文件。
答案 0 :(得分:3)
您正在将6个字符的字符串读入6个字符的数组中。使您的数组更大,以便终止null。此外,对于fscanf,“%6s”将是一个更安全的格式说明符(否则,如果输入文件格式错误,则存在缓冲区溢出的风险)。
答案 1 :(得分:1)
这里是代码=&gt;
#include <stdio.h>
#include <stdlib.h>
int main () {
FILE *fin = fopen ("ride.in", "r");
FILE *fout = fopen ("ride.out", "w");
int i;
char UFO[6], group[6];
fscanf(fin, "%s", UFO);
int sumUFO = 0, sumGroup = 0;
for(i = 0; i < 6; i++){
sumUFO += (int) UFO[i];
printf("%c => %d \n",UFO[i],sumUFO );
}
fseek(fin,6,SEEK_SET);
fscanf(fin, "%s", group);
for(i = 0; i < 6; i++){
sumGroup += (int) group[i];
printf("%c =>> %d \n",group[i],sumGroup );
}
fclose(fin);
if(sumUFO == sumGroup)
fprintf(fout,"GO");
else
fprintf(fout,"STAY");
return 0;
}
在这段代码中fprintf()工作正常....