Haz*_*Bot 1 c printf pointers scanf segmentation-fault
我一直在测试C中点的编码操作,我经历了一个我无法解释的奇怪现象.
以下代码只是实例化四个双变量并接收用户输入以填充所有变量.
奇怪的是注释掉的行,当没有注释行时代码按预期工作,但是当我注释掉它时,循环中的分段失败.
我一直在编写这个测试 c9.io
码:
#include <stdio.h>
int main() {
double i, a, b, c, d;
double * cur = &a;
char ch = 'a';
// printf("a - %p\nb - %p\nc - %p\nd - %p\n",&a, &b, &c, &d);
for (i=0; i<4; i++) {
printf("Enter %c: ", ch++);
scanf("%lf", cur++);
}
printf("a - %lf\nb - %lf\nc - %lf\nd - %lf\n",a, b, c, d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不知所措,为什么打印地址绕过分段失败?
在你的代码中,
double * cur = &a;
Run Code Online (Sandbox Code Playgroud)
然后做
scanf("%lf", cur++);
Run Code Online (Sandbox Code Playgroud)
没有指向a,b,c,d连续变量,你可能已经预期.它只是未定义的行为.
FWIW尝试访问超出范围的内存,调用未定义的行为.
在情况下,你要保持同样的办法,你可以定义a(而不是像独立的变量作为数组a,b,c,d),然后就可以使用cur到遍历了数组.数组成员始终是连续的.