可能重复:
Why doesn't scanf need an ampersand for strings and also works fine in printf (in C)?
在C中,当我们使用scanf()
函数获取用户输入时,我们总是在变量前使用&
符号。
例如:
scanf("%d", &number);
scanf("%c", &letter);
这可确保我们的输入存储在适当的地址中。但是如果是字符串,我们不会使用&
。
为什么?
答案 0 :(得分:13)
C中的“字符串”是字符缓冲区的地址
您希望scanf
填充缓冲区中的内存,该内存由变量指向。
相反,int
是一块内存,而不是一个地址。为了让scanf
填充该内存,您需要传递其地址。
答案 1 :(得分:1)
由于buf
中的标识符char buf[512];
降级为指向数组第一个元素的指针,因此您无需在scanf
的参数中指定指向缓冲区的指针。通过&buf
传递给scanf的指针现在是一个双向间接指针(它是一个指向缓冲区开头的指针),可能会导致程序崩溃或其他不良行为。