2017-09-20 87 views
0

一個以輸入預期我試圖運行的代碼輸入看起來是這樣的:從標準輸入分段故障

(I,J),其中i和j是整數。 (例如(1,2),(10,21)等)。

我需要在int變量中存儲這兩個整數。

這是我做過什麼:

getchar(); // gets open parenthesis 

    // gets first num 
    char *first; 
    int z = 0; 
    int a; 

    while((a = getchar()) != ',') { 
     first[z] = a; 
     z++; 
    } 
    int firstNum; 
    sscanf(first, "%d", &firstNum); 
    printf("%d\n", firstNum); //checking if got correct num 

    // gets second num 
    char *second; 
    int y = 0; 
    int b; 
    while((b = getchar()) != ')') { 
     second[y] = b; 
     y++; 
    } 
    int secondNum; 
    sscanf(second, "%d", &secondNum); 
    printf("%d\n", secondNum); //checking if got correct num 

它的工作原理來獲得的第一個數字。但是,當我爲第二個數字完成時,我遇到了分段錯誤,我找不到原因?我基本上只是重新獲得第一個數字的過程?

謝謝!

+4

'第一個'只是一個指針,它沒有任何內存=>使用malloc或原始數組 – Garf365

+0

我將其更改爲一個大小爲100的數組,它可以工作。謝謝! – Katrina

+0

此外,當您敲入回車鍵時寫入stdin的換行符可能會導致隨後調用'sscanf'時出現問題。在你的格式字符串的第一部分中包含空格以消耗'\ n':'sscanf(first,「%d」,&firstNum);' – ryyker

回答

4

第一和第二應該是數組而不是指針。 這兩個指針都指向內存中的某個位置,並且在將它們作爲「數組」訪問時,會覆蓋不同的內存。

變化:

char *first; 
char *second; 

爲:

char first[128] ={0}; 
char second[128] ={0}; 

同時,閱讀以下內容: http://www.geeksforgeeks.org/difference-pointer-array-c/ 它說明了有關在一個非常明確的方式陣列和指針之間的差值。