首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fscanf("%s%s",comet,group);

fscanf("%s%s",comet,group);
EN

Stack Overflow用户
提问于 2013-11-30 21:00:26
回答 1查看 66关注 0票数 0
代码语言:javascript
复制
#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:

代码语言:javascript
复制
COMETQ
HVNGAT

答案应该是“去”,但我总是得到“留下”。我使用了dbg,发现comet是'\000‘。我对fscanf不是很熟悉,所以在fscanf(fin,"%s%s",comet,group);中发生了什么

EN

回答 1

Stack Overflow用户

发布于 2013-11-30 21:10:19

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20300563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档