从标准输入分段故障
问题描述:
一个以输入预期我试图运行的代码输入看起来是这样的:从标准输入分段故障
(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
它的工作原理来获得的第一个数字。但是,当我为第二个数字完成时,我遇到了分段错误,我找不到原因?我基本上只是重新获得第一个数字的过程?
谢谢!
答
第一和第二应该是数组而不是指针。 这两个指针都指向内存中的某个位置,并且在将它们作为“数组”访问时,会覆盖不同的内存。
变化:
char *first;
char *second;
为:
char first[128] ={0};
char second[128] ={0};
同时,阅读以下内容: http://www.geeksforgeeks.org/difference-pointer-array-c/ 它说明了有关在一个非常明确的方式阵列和指针之间的差值。
'第一个'只是一个指针,它没有任何内存=>使用malloc或原始数组 – Garf365
我将其更改为一个大小为100的数组,它可以工作。谢谢! – Katrina
此外,当您敲入回车键时写入stdin的换行符可能会导致随后调用'sscanf'时出现问题。在你的格式字符串的第一部分中包含空格以消耗'\ n':'sscanf(first,“%d”,&firstNum);' – ryyker