2017-09-20 29 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/ 它说明了有关在一个非常明确的方式阵列和指针之间的差值。