1. 程式人生 > 實用技巧 >C 庫函式 - strlcpy()

C 庫函式 - strlcpy()

strlcpy

C語言標準庫函式strlcpy,是更加安全版本的strcpy函式,在已知目的地址空間大小的情況下,把從src地址開始且含有'\0'結束符的字串複製到以dest開始的地址空間,並不會造成緩衝區溢位。
中文名
strlcpy
外文名
strlcpy
功能
字串複製
標頭檔案
string.h
返回值型別
size_t

目錄

  1. 1C語言函式
  2. 2功能說明
  3. 3與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'字元結尾[2]
。程式碼說明如下
1 2 3 4 5 6 7 8 9 10 #include<string.h> #include<stdio.h> intmain() { charbuf[5]; charsrc[10]="12345678"; strlcpy(buf,src,sizeof(buf)); printf("%s\n",buf);//輸出1234 return0; }
上述示例中buf字串最終結果是“1234\0”,以結束字元結尾,而如果同樣地情況下使用strncpy函式,程式碼如下
1 2 3 4 5 6 7 8 9 10 #include<string.h>
#include<stdio.h> intmain() { charbuf[5]; charsrc[10]="12345678"; strncpy(buf,src,sizeof(buf)); printf("%s\n",buf); return0; }
這個時候buf最終結果就是"12345",並沒有以結束字元結尾。