首页 文章

仅针对一个文件的分段错误?

提问于
浏览
1

所以我试图从一个文件(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 回答

  • 1

    您正在将6个字符的字符串读入6个字符的数组中 . 使您的数组更大,以便终止null . 此外,对于fscanf,“%6s”将是一个更安全的格式说明符(否则,如果输入文件格式错误,则存在缓冲区溢出的风险) .

  • 3
    • 在调用1st fscanf()之后,当你调用第二个fscanf()时它正在读取6个字符,它没有找到下一个字符必须读取的指针 . 因为你必须使用lseek() .

    这是代码=>

    #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()工作正常....

相关问题