打印并扫描字符串c

The*_*her 6 c string printf char

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

#include <stdio.h>

main() {
    char name[20];
    printf("Name: ");
    scanf_s("%s", name);
    printf("%s", name);
}
Run Code Online (Sandbox Code Playgroud)

在我这样做之后,它不打印名称.会是什么呢?

Spi*_*rix 9

引用文献scanf_s,

备注:

[...]

不像scanfwscanf,scanf_swscanf_s需要类型的所有输入参数中指定的缓冲区大小c,C,s,S其被包围在或字符串控制集合[].字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后.

所以 scanf_s

scanf_s("%s", &name);
Run Code Online (Sandbox Code Playgroud)

是错误的,因为你没有传递表示缓冲区大小的第三个参数.另外,&name计算一个类型的指针,char(*)[20]该指针%sscanf_sexpected(char*)中的指针不同.

通过使用第三个参数表示的缓冲器的大小使用固定的问题sizeof_countof并用name的替代&name:

scanf_s("%s", name, sizeof(name));
Run Code Online (Sandbox Code Playgroud)

要么

scanf_s("%s", name, _countof(name));
Run Code Online (Sandbox Code Playgroud)

name是一个数组,数组的名称的名称为"衰减"的指针到它的第一元件,其类型的char*,正是%sscanf_s预期.