【问题标题】:C: why no & for strings in scanf() function? [duplicate]C:为什么 scanf() 函数中的字符串没有 &? [复制]
【发布时间】:2012-01-19 05:48:42
【问题描述】:

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

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

这是为什么呢?

【问题讨论】:

    标签: c string scanf


    【解决方案1】:

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

    相比之下,int 是一块内存,而不是地址。为了让scanf 填充该内存,您需要传递它的地址。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 1970-01-01
        • 2019-05-04
        • 2016-11-11
        • 1970-01-01
        相关资源
        最近更新 更多