我的头被指针缠住了,我在这段代码上遇到了段错误,没有明显的原因。 基本上这是有效的:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *a;
printf("Please enter a number: ");
scanf("%i", *(&a));
printf("1st number is: %i\n", *a);
}
这不会:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *a, *b;
printf("Please enter a number: ");
scanf("%i", *(&a));
printf("Please enter the second number: ");
scanf("%i", *(&b));
printf("1st number is: %i\n", *a);
printf("2nd number is: %i\n", *b);
}
为什么?
最佳答案
您已经声明了两个指向整数的指针,但从未声明或分配这些指针可能指向的任何内存。相反,在堆栈上声明两个整数,并将指针传递给它们:
int a, b;
scanf("%i", &a);
scanf("%i", &b);
printf("Numbers: %i %i\n", a, b);
您的第一个示例能够工作的事实纯粹是运气 - 很可能一个看似有效的指针留在了堆栈上的正确位置,导致该示例几乎无法工作。
关于c - 2 次 scanf 到指针后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51923130/