[英]scanf_s not enough arguments passed for format string(Visual Studio)
[英]Why doesn't Visual Studio's scanf_s() function take string inputs?
我使用 Visual Studio 2022,它將scanf()
function 標記為不安全並棄用它。 它建議我改用scanf_s()
。 所以昨天我的老師在 C 中教我們字符串,並向我們展示了一個從鍵盤接收字符串的程序,我在我的編譯器中嘗試過使用scanf_s()
輸入字符串返回錯誤C4473
或C6064
,即使我的代碼與那個相同除了scanf()
的不同之外,我的老師的。
#include<stdio.h>
#include<stdlib.h>
void main() {
char name[25];
printf("Enter your name ");
scanf_s("%s", name);//gave an ERROR
printf("Hello %s!", name);
}
我嘗試使用常規scanf()
和禁用警告,它起作用了。
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable : 4996)
void main() {
char name[25];
printf("Enter your name ");
scanf("%s", name);//worked as intended
printf("Hello %s!", name);
}
為什么scanf_s
無法接受字符串輸入?
來自 C Standard *K.3.5.3.2 fscanf_s 函數)這個描述和 function scanf_s
是一樣的
4 fscanf_s function 等同於 fscanf,除了 c、s 和 [ 轉換說明符適用於一對 arguments(除非分配抑制由 * 指示)。 這些 arguments 中的第一個與 fscanf 相同。 在參數列表中,第二個參數緊跟在該參數之后,該參數的類型為 rsize_t 並給出該對的第一個參數指向的數組中的元素數。 如果第一個參數指向一個標量 object,它被認為是一個元素的數組。
所以你需要寫
scanf_s( "%s", name, sizeof( name ) );
這也是scanf
的調用
scanf("%s", name);
如果重寫它會更安全
scanf( "%24s", name );
請注意,根據 C 標准,不帶參數的 function main 應聲明如下
int main( void )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.