strlcpy

strlcpy

C語言標準庫函式strlcpy,是更加安全版本的strcpy函式,在已知目的地址空間大小的情況下,把從src地址開始且含有'\0'結束符的字元串複製到以dest開始的地址空間,並不會造成緩衝區溢出。

基本介紹

  • 中文名:strlcpy
  • 外文名:strlcpy
  • 功能:字元串複製
  • 頭檔案:string.h
  • 返回值類型:size_t
C語言函式,功能說明,與strncpy區別,

C語言函式

函式原型聲明:size_t strlcpy(char *dest, const char *src, size_t size)
頭檔案引用:#include <string.h>
功能: 在已知dest緩衝區大小並不會造成緩衝區溢出前提下,將src地址開始的字元串複製到以dest開始的地址空間
返回值:src字元串的大小
函式參數:參數dest為目的字元串開始的指針,src為源字元串的開始地址,參數size代表dest字元串的大小

功能說明

strlcpy函式創建的目的主要是針對strcpy函式緩衝區溢出的問題,因為一旦strcpy調用中src的字元串長度超過了dst的緩衝區大小,就會造成緩衝區安全漏洞問題,這是一類常見也嚴重的計算機安全漏洞。當然strcat函式也有安全版本的strlcat函式。

與strncpy區別

類似的函式還有strncpy,但是strlcpy常常是更加安全地選擇,因為strlcpy在複製之後dst字元串一定會以'\0'字元結尾。代碼說明如下
#include <string.h>#include <stdio.h>int main(){    char buf[5];    char src[10] = "12345678";    strlcpy(buf, src, sizeof(buf));    printf("%s\n",buf);//輸出1234    return 0;}
上述示例中buf字元串最終結果是“1234\0”,以結束字元結尾,而如果同樣地情況下使用strncpy函式,代碼如下
#include <string.h>#include <stdio.h>int main(){    char buf[5];    char src[10] = "12345678";    strncpy(buf, src, sizeof(buf));    printf("%s\n",buf);    return 0;}
這個時候buf最終結果就是"12345",並沒有以結束字元結尾。

相關詞條

熱門詞條

聯絡我們