[英]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>
作為 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.