首页 > 解决方案 > 为什么这个 printf 语句需要一个 & 符号?

问题描述

为什么我在 printf 语句中的数组之前需要一个 & 号,而其他时候 & 号只在 scanf 中使用?

全新的,所以如果你能尽可能简单地解释,那会有所帮助。


int main(void) {

  char word[1];
  scanf("%s", &word[0]);
  printf("%s", word[0]);
  return 0;
}

标签: cstringprintf

解决方案


你确实需要一个。没有它是不正确的,并导致未定义的行为,这可能导致任何事情发生(即使程序看起来正常工作)。此外,word[1]只能保存空字符串的空终止符,除此之外,它会导致缓冲区溢出,也会导致未定义的行为。它应该是:

int main(void) {
    char word[10]; // or any value that is big enough for the input that your anticipating
    scanf("%9s", &word[0]);
    printf("%s", &word[0]);
    return 0;
}

当然你也可以&word[0]word.

另请注意,我输入的%9s不仅仅是调用,这意味着它将获得最多的字符,添加的空终止符适合我们作为示例的字符。这样,如果用户输入的内容太大,您就不会得到未定义的行为,而是会截断该输入。%sscanf9word[10]


推荐阅读