作者qsort (Cos)
看板C_and_CPP
標題Re: [問題] 用memcpy 會有殘餘值怎麼辦?
時間Thu Feb 4 16:44:44 2016
原文吃光光
先說我認為的答案:
snprintf(buff, buff_size, "%
.*s", token_len, token);
//配合原文: snprintf(Ptr->ListString,ListString_size,"%B
.*s",Length,CharPtr);
ref:
http://stackoverflow.com/a/5932385
如果有字串相接的需求
不要用strcat,因為不安全,容易Buffer overflow
我個人是推薦:
int l=0;
l+=snprintf(buff+l,buff_size-l, "%s", str1); //strcat(buff, str1);
l+=snprintf(buff+l,buff_size-l, "%s", str2); //strcat(buff, str2);
好處是buff不用清空,只要把l設成0即可
同時snprintf(...)保證最後結尾一定是'\0'
以上
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.61.29.28
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1454575486.A.8B7.html
※ 編輯: qsort (210.61.29.28), 02/04/2016 16:45:15
※ 編輯: qsort (210.61.29.28), 02/04/2016 16:52:37
※ 編輯: qsort (210.61.29.28), 02/04/2016 17:00:02
→ apologize: stdio.h 沒有阿,請問這函式是放哪邊? 02/05 14:50
→ qsort: 打個manual snprintf都蠻一堆 02/05 16:50
→ qsort: 如果你的c lib沒有,一定是太舊了,請換一套 02/05 16:52
推 EdisonX: 我有點看不懂 %.*s 和 %*s 有什麼不同?乍看是相同的? 02/06 21:41
推 LPH66: %5s 是最短印 5 個字 (不夠會補), %.5s 是最多印 5 個字 02/06 23:53
推 EdisonX: 原來如此 謝謝LPH66。那有沒有固定5個字,超過的話,{ 02/07 10:17
→ EdisonX: 顯示二個字,再加上刪節符號...}?還是只能寫function? 02/07 10:17
→ uranusjr: 這種只能寫 function, 別說 C 了高階語言都不見得有 02/07 15:39
推 EdisonX: 也是 我在天真什麼 XD 02/07 20:16