簡體   English   中英

為什么使用 strcpy_s 和 strcat_s 會收到警告?

[英]Why do i gett warnings by using strcpy_s and strcat_s?

我在我的 Win64 PC 上使用 code:blocks 使用 strcpy_s 和 strcat_s 編寫了一個示例。 該程序有效,但我收到警告消息“警告:分別為 strc_s 和 strcat_s 隱式聲明 function 'strcpy_s'。編譯器設置啟用了 C11。為什么我在 string.h 中找不到這兩個函數?

// This program uses strcpy_s and strcat_s to build a phrase.

#include <string.h>     // for strcpy_s, strcat_s
#include <stdio.h>      // for printf

int main(void)
{
    char stringBuffer[80];

    strcpy_s(stringBuffer, sizeof(stringBuffer), "Hello world from ");
    strcat_s(stringBuffer, sizeof(stringBuffer), "strcpy_s ");
    strcat_s(stringBuffer, sizeof(stringBuffer), "and ");
    strcat_s(stringBuffer, sizeof(stringBuffer), "strcat_s!");

    printf("stringBuffer = %s\n", stringBuffer);
}

來自 cppreference:

與所有邊界檢查函數一樣,只有在__STDC_LIB_EXT1__由實現定義並且用戶在包含<string.h>之前將__STDC_WANT_LIB_EXT1__定義為 integer 常量 1 時,才保證 strcpy_s 可用。

#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>

另請參閱: __STDC_LIB_EXT1__ 在 gcc 和 clang 中的可用性

作為 strcpy() 和 strcat() 方法的近似替代品,strcpy s() 和 strcat s() 函數在 ISO/IEC WDTR 24731. () 中進行了描述。 目標緩沖區的最大長度由這些過程所需的附加 rsize t 類型參數指定。

當沒有違反約束時,strcpy s() function 等同於 strcpy()。 strcpy s() function 將源字符串中的字符(直至並包括終止字符 null)復制到目標字符數組。 如果 function 成功,則返回 0。

只有當源字符串可以完全復制到目標而無需填充目標緩沖區時,strcpy s() function 才會成功。 如果目標緩沖區的最大大小等於零、大於 RSIZE MAX 或更小,或者如果源指針或目標指針為 NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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