[英]print and scan a string c
我想使用Visual Studio在C中掃描和打印字符串。
#include <stdio.h>
main() {
char name[20];
printf("Name: ");
scanf_s("%s", name);
printf("%s", name);
}
在我這樣做之后,它不打印名稱。 會是什么呢?
引用scanf_s
的文檔 ,
備注:
[...]
與
scanf
和wscanf
不同,scanf_s
和wscanf_s
要求為所有包含在[]
c
,C
,s
,S
或字符串控件集的輸入參數指定緩沖區大小。 字符的緩沖區大小作為附加參數傳遞,緊跟在指向緩沖區或變量的指針之后。
所以, scanf_s
scanf_s("%s", &name);
是錯誤的,因為你沒有傳遞表示緩沖區大小的第三個參數。 此外, &name
計算為char(*)[20]
類型的指針,該指針與scanf_s
期望值( char*
)中的%s
不同。
通過使用sizeof
或_countof
使用表示緩沖區大小的第三個參數並使用name
而不是&name
來修復問題:
scanf_s("%s", name, sizeof(name));
要么
scanf_s("%s", name, _countof(name));
name
是數組的名稱,數組的名稱“衰減”到指向其第一個元素的指針,該元素的類型為char*
,只是scanf_s
預期的%s
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.