繁体   English   中英

c fscanf for int导致段错误

[英]c fscanf for ints causes segfault

披露:这是家庭作业。

以下代码旨在读取格式如下的命令文件:

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”留出空间。 您对ADDTERM没问题,因为它的字母比MULTIPLY少1个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM