从标准输入分段错误中获取输入
Taking input from stdin segmentation fault
我正在尝试 运行 的代码的预期输入看起来像这样:
(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
获取第一个数字有效。但是,当我为第二个数字做这件事时,出现了分段错误,我不知道为什么?我基本上只是重做了获取第一个数字的过程?
谢谢!
first 和 second 应该是数组而不是指针。
您的两个指针都指向内存中的某个位置,并且在访问它们时 "as arrays" 您覆盖了不同的内存。
变化:
char *first;
char *second;
成为:
char first[128] ={0};
char second[128] ={0};
另外,请阅读以下内容:
http://www.geeksforgeeks.org/difference-pointer-array-c/
它以非常清晰的方式解释了数组和指针之间的区别。
我正在尝试 运行 的代码的预期输入看起来像这样:
(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
获取第一个数字有效。但是,当我为第二个数字做这件事时,出现了分段错误,我不知道为什么?我基本上只是重做了获取第一个数字的过程?
谢谢!
first 和 second 应该是数组而不是指针。 您的两个指针都指向内存中的某个位置,并且在访问它们时 "as arrays" 您覆盖了不同的内存。
变化:
char *first;
char *second;
成为:
char first[128] ={0};
char second[128] ={0};
另外,请阅读以下内容: http://www.geeksforgeeks.org/difference-pointer-array-c/ 它以非常清晰的方式解释了数组和指针之间的区别。