2011-03-21 46 views
1

披露:這是家庭作業。c fscanf for int導致段錯誤

下面的代碼是爲了讀取格式化像一個命令文件:

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 version 4.4.5(Ubuntu/Linaro 4.4.4-14ubuntu5)」,而我的學校使用「gcc version 4.1.2 20080704(Red Hat 4.1.2-48)」

任何想法,爲什麼會這樣?感謝您的幫助!

+0

代碼運行時'commands'字符串的確切值是什麼? – Mehrdad 2011-03-21 05:54:27

+0

命令不是一個字符串,而是一個* FILE。這不是它應該如何? – malenkylizards 2011-03-21 05:56:06

+0

如果您可以發佈允許他人重現錯誤的最小程序,它總是有幫助的。 – 2011-03-21 05:59:44

回答

1

您需要在字符串中爲空終點'\ 0'留出空間。你可以使用ADDTERM,因爲它的字母少於MULTIPLY。