2012年11月27日 星期二

strncpy 不是用來取代 strcpy

strncpy 被創造出來的目的並非是為了要有一個安全版本的 strcpy
而是因為當時撰寫 unix 檔案系統需要一個方便的 "拷貝固定長度字串" 的函式
有了這個函式就可以用這種寫法寫檔案系統的 code
strncpy(inode->d_name, filename, 14);
用這種寫法 假設 source buffer 字串大小小於 14 例如說是 8
strncpy 會把 dest buffer 的第 9 ~ 14 的 buffer 清為 0

很多時候我們只是想複製字串 這多餘的行為我們不需要
若要說 strcpy 的安全版本 snprintf 也許更合適

snprintf(dest, n, "%s", src);
reference:
http://felix021.com/blog/read.php?2081

沒有留言:

張貼留言