簡體   English   中英

為什么 Visual Studio 的 scanf_s() function 不接受字符串輸入?

[英]Why doesn't Visual Studio's scanf_s() function take string inputs?

我使用 Visual Studio 2022,它將scanf() function 標記為不安全並棄用它。 它建議我改用scanf_s() 所以昨天我的老師在 C 中教我們字符串,並向我們展示了一個從鍵盤接收字符串的程序,我在我的編譯器中嘗試過使用scanf_s()輸入字符串返回錯誤C4473C6064 ,即使我的代碼與那個相同除了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM