披露:这是作业。
以下代码用于读取格式为:
的命令文件 ADD 6 6 5
ADDTERM 0 1 1
MULTIPLY 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 :(得分:1)
您需要为字符串中的空终点'\ 0'留出空间。你对ADDTERM没问题,因为它比MULTIPLY少了一个字母。