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)