fscanf(“%s%s”,彗星,组);

时间:2013-11-30 13:00:26

标签: c scanf

#include <stdio.h>
#include <stdlib.h>

int main(){
    FILE *fin = fopen ("ride.in", "r");
    FILE *fout = fopen ("ride.out", "w");

    char group[6], comet[6];
    fscanf(fin, "%s%s", comet, group);

    int i = 0, n = 1, m = 1;
    while(group[i])
        n *= (group[i++] - 'A' + 1);

    i = 0;
    while(comet[i])
        m *= (comet[i++] - 'A' + 1);

    fprintf(fout, "%s\n", (n % 47 == m % 47)? "GO" : "STAY");

    exit (0);
}

ride.in:

COMETQ
HVNGAT

答案应该是“GO”,但我总是“保持”。 我用dbg发现comet [0]是'\ 000'。 我对fscanf不是很熟悉,所以fscanf(fin,"%s%s",comet,group);发生了什么?

1 个答案:

答案 0 :(得分:0)

cometgroup的大小均为6,但您的输入字符串长度为6个字符,这需要7个元素的数组才能正确存储(1个用于终止'\0')。因此,fscanf()导致越界数组访问和未定义行为