【发布时间】:2016-03-11 12:09:54
【问题描述】:
在C语言中,当scanf()中的参数不存在&时,不会产生编译错误;相反,显示的结果是错误的(即出现语义错误)。
考虑以下代码:
char str[30];
int a;
printf("Enter the value");
scanf("%s %d", str, a); // This is the statement in question.
printf("You entered %s %d", str, a);
这里我知道str 是一个字符数组,所以它会有一个基地址,因此不会产生编译错误。但是为什么a 参数没有& 不会导致编译错误呢?
同样str 给出正确的输出,但整数总是产生值 -28770 作为输出。这是为什么呢?
【问题讨论】:
-
你在输入什么?你期望输出什么?
-
“整数总是将 -28770 作为输出” - 未初始化的局部变量
a。包含声明之前该内存位置(堆栈或寄存器)的任何内容。每次运行可能相同,每次运行可能不同;这就是为什么它是“未定义的行为”。 - 你的编译器没有警告你吗? -
好的。并且编译器没有给出任何警告。感谢您的回答。
标签: c string pass-by-reference access-specifier