strncpy和snprintf的正確用法詳解

2021-08-25 13:46:28 字數 953 閱讀 3179

copyleft by bitfly @

permalink:

******************** 正文 ********************

strncpy的正確用法:

strncpy(dest, src, sizeof(dest));

dest[sizeof(dest)-1] = 『/0』;

snprintf的正確用法:

snprintf(dest, sizeof(dest), "%s", src);

strncpy的問題:

size一定要用sizeof(dest)或sizeof(dest)-1,不可誤用sizeof(src).

手工填0. 務必要把dest的最後乙個位元組手工設定為0. 因為strncpy僅在src的長度小於dest時,對剩餘的位元組填0.

效能問題。當dest長度遠大於src時,由於strncpy會對多餘的每個位元組填0,會有很大的效能損失。

返回值。strncpy返回dest,因而無法知道拷貝了多少個位元組。

snprintf的問題:

不可省略第三個引數"%s",隱患是,如果src中包含%,會引發core。

效能問題。當src長度遠大於dest時,由於snprintf要返回src的位元組數(參見:需要掃瞄src,會有很大的效能損失。

返回值。如果當前buf夠用,返回實際寫入的字元數;如果不夠用,返回將要寫入的字元數。換句話說,返回值就是傳入的字元數目。

總結:snprintf使用比strncpy簡潔。

snprintf可以獲取被拷貝的位元組數。

二者都有效能問題。如果src遠大於dest,用strncpy;如果dest遠大於src,用snprintf。

******************** 結尾 ********************

memcpy strcpy和strncpy的簡介

在c的操作中,對陣列類資料進行批量賦值一般通過memcpy strcpy和strncpy這三種函式進行,這裡將為其進行介紹.這三者的區別在於strcpy和strncpy只能對字串的資料進行拷貝,無法用於拷貝中間含有null的資料。函式的標頭檔案 string.h 1.memcpy 函式名 void ...

strcpy和strncpy用法和區別

1.strcpy函式 顧名思義字串複製函式 原型 extern char strcpy char dest,char src 功能 把從src位址開始且含有null結束符的字串賦值到以dest開始的位址空間,返回dest 位址中儲存的為複製後的新值 要求 src和dest所指記憶體區域不可以重疊且d...

strcpy和strncpy用法和區別

1.strcpy函式 顧名思義字串複製函式 原型 extern char strcpy char dest,char src 功能 把從src位址開始且含有null結束符的字串賦值到以dest開始的位址空間,返回dest 位址中儲存的為複製後的新值 要求 src和dest所指記憶體區域不可以重疊且d...