c fscanf для int вызывает segfault - PullRequest
1 голос
/ 21 марта 2011

РАСКРЫТИЕ: Это домашнее задание.

Код ниже предназначен для чтения командного файла в формате:

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)»

Есть идеи, почему это будет?Ваша помощь приветствуется!

1 Ответ

1 голос
/ 21 марта 2011

Вам нужно оставить место для нулевого конца '\ 0' в вашей строке. Вы были в порядке с ADDTERM, потому что он на 1 букву меньше, чем MULTIPLY.

...