C:为什么没有&对于scanf()函数中的字符串?

时间:2012-01-19 05:48:42

标签: c string scanf

  

可能重复:
  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);

这可确保我们的输入存储在适当的地址中。但是如果是字符串,我们不会使用&

为什么?

2 个答案:

答案 0 :(得分:13)

C中的“字符串”是字符缓冲区的地址 您希望scanf填充缓冲区中的内存,该内存由变量指向。

相反,int是一块内存,而不是一个地址。为了让scanf填充该内存,您需要传递其地址。

答案 1 :(得分:1)

由于buf中的标识符char buf[512];降级为指向数组第一个元素的指针,因此您无需在scanf的参数中指定指向缓冲区的指针。通过&buf传递给scanf的指针现在是一个双向间接指针(它是一个指向缓冲区开头的指针),可能会导致程序崩溃或其他不良行为。