打印并扫描字符串c

时间:2015-04-14 14:06:26

标签: c string char printf

我想使用Visual Studio在C中扫描并打印字符串。

#include <stdio.h>

main() {
    char name[20];
    printf("Name: ");
    scanf_s("%s", name);
    printf("%s", name);
}

执行此操作后,它不会打印名称。 它可能是什么?

1 个答案:

答案 0 :(得分:9)

引自the documentation of scanf_s

  

<强>说明:

     

[...]

     

scanfwscanf不同,scanf_swscanf_s要求为c类型的所有输入参数指定缓冲区大小,{{1} },CsS中包含的字符串控件集。字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。

所以,[]

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