披露:这是家庭作业。
下面的代码用于读取格式如下的命令文件:
ADD 6 6 5
ADDTERM 0 1 1
MULTIPLY 2 40
并使用给定的参数调用相应的命令。由于某种原因,当ADD和ADDTERM按预期工作时,当读取乘法行时,我得到一个segfault。

    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服务器上的一个问题。我的家用电脑运行良好,使用“GCC4.4.5版(Ubuntu/Linaro 4.4.4-14ubuntu 5)”,而我的学校使用“GCC4.1.20080704版(redhat4.1.2-48)”
你知道为什么吗?感谢您的帮助!

最佳答案

您需要为字符串中的空终端“\0”留出空间。你对ADDTERM没意见,因为它比乘法少1个字母。

10-06 14:26