我想使用Visual Studio在C中扫描并打印字符串。
#include <stdio.h>
main() {
char name[20];
printf("Name: ");
scanf_s("%s", name);
printf("%s", name);
}
执行此操作后,它不会打印名称。 它可能是什么?
答案 0 :(得分:9)
引自the documentation of scanf_s
,
<强>说明:强>
[...]
与
scanf
和wscanf
不同,scanf_s
和wscanf_s
要求为c
类型的所有输入参数指定缓冲区大小,{{1} },C
,s
或S
中包含的字符串控件集。字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。
所以,[]
scanf_s
是错误的,因为您没有传递表示缓冲区大小的第三个参数。此外,scanf_s("%s", &name);
评估为&name
类型的指针,该指针与char(*)[20]
期望%s
中的scanf_s
不同。{/ p>
使用char*
或sizeof
并使用_countof
代替name
使用表示缓冲区大小的第三个参数来解决问题:
&name
或
scanf_s("%s", name, sizeof(name));
scanf_s("%s", name, _countof(name));
是数组的名称和数组的名称&#34;衰变&#34;指向其第一个name
类型元素的指针,指向char*
期望的%s
。