gpt4 book ai didi

c fscanf for ints 导致段错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:29 24 4
gpt4 key购买 nike

披露:这是作业。

下面的代码用于读取格式如下的命令文件:

添加 6 6 5
ADDTERM 0 1 1
乘以 2 40

并使用给定的参数调用适当的命令。出于某种原因,虽然 ADD 和 ADDTERM 按预期工作,但在读取乘法行时出现段错误。

    int arg_1 = 0, arg_2 = 0, arg_3 = 0;

while(fscanf(commands, "%s", command) != EOF)
{
if(strcmp(command, "ADDTERM") == 0)
{
/*The following line runs fine!*/
fscanf(commands, "%d %d %d",
&arg_1, &arg_2, &arg_3);
printf("ADDTERM, Poly: %d, Coeff: %d, Exp: %d\n",
arg_1, arg_2, arg_3);
if(polys[arg_1] == NULL)
{polys[arg_1] = CreatePolynomial();}
AddTermToPoly(polys[arg_1], arg_2, arg_3);
}

else if(strcmp(command, "MULTIPLY") == 0)
{
/*The following line results in a segfault*/
fscanf(commands, "%d %d", &arg_1, &arg_2);

printf("MULTIPLY, Poly: %d, Multiplier: %d\n",
arg_1, arg_2);
MultiplyPoly(polys[arg_1], arg_2);
}

/*...*/
}

这也只是我学校Linux服务器上的一个问题。我的家用电脑运行良好,使用“gcc 4.4.5 版(Ubuntu/Linaro 4.4.4-14ubuntu5)”,而我的学校使用“gcc 4.1.2 20080704 版(Red Hat 4.1.2-48)”

知道为什么会这样吗?感谢您的帮助!

最佳答案

您需要在字符串中为空终止符 '\0' 留出空间。您对 ADDTERM 没问题,因为它比 MULTIPLY 少 1 个字母。

关于c fscanf for ints 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5374281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com