C - 警告:格式'%s'需要类型'char*',但参数2的类型为'char(*)[20]'

l00*_*ake 11 c arrays pointers

我正在尝试运行一个简单的C程序,但是我收到了这个错误:"警告:格式'%s'需要类型'char ',但参数2的类型为'char()[20]'"

使用gcc 4.2.1在终端中运行Mac OSX Mountain Lion编译

#include <stdio.h>

int main() {
    char me[20];

    printf("What is your name?");
    scanf("%s", &me);
    printf("Darn glad to meet you, %s!\n", me);

    return (0);
}
Run Code Online (Sandbox Code Playgroud)

MOH*_*MED 25

scanf("%s",&me);
Run Code Online (Sandbox Code Playgroud)

应该

scanf("%s",me);
Run Code Online (Sandbox Code Playgroud)

阐释:

"%s"意味着scanf期望指向char数组的第一个元素的指针.me是一个对象数组,可以作为指针进行评估.这就是为什么你可以me直接使用而不添加&.添加&me将被评估‘char (*)[20]’,您的scanf正在等待char *

代码评论家:

使用"%s"可能导致缓冲区溢出,如果用户输入的字符串长度> 20.因此,它更改为"%19s":

scanf("%19s",me);
Run Code Online (Sandbox Code Playgroud)

  • 或者``,&me [0])`,如果你真的想使用`&`运算符. (4认同)
  • @Mike因为...等等,编译器警告清楚地告诉你为什么. (4认同)
  • 如果你解释*为什么*那​​将是很好的 (3认同)
  • @ H2CO3 - 啊,但如果杰克清楚的话,他就不会问这个问题了.;) (2认同)