看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) no 問題(Question): 我想要把argv[2]這位子抓到的字串傳到我宣告好的char inseq[20]; 我有查到可以用memcpy, strcpy, strncpy, strncat, stroi, 我目前是用strcpy(inseq, argv[2]); 而且可以work了, 不過http://tinyurl.com/8xlby3a這個網站上對這些function有一些討論, 請問最好的方式是用哪一種比較好呢? 因為像memcpy需要說你要傳多少字元, 可是argv[2]並不是固定字元數的, 所以我用strcpy是最好的方法嗎? 會不會隱含有在什麼特定狀況下會出錯的可能性呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.225.120
joefaq:你可以用strlen算字串的長度 再動態宣告就好 05/29 18:58
stupid0319:這個也能討論XD,還不就複製而己嗎= =? 05/29 19:40
EdisonX:要說隱含出錯問題的話,大概會扯到 buf.ov.attack 吧. 05/29 19:43
cobrasgo:有n的版本就用n,相信我 05/30 01:02
ayumiayayaai:要相信樓上 05/30 15:09
AstralBrain:strncpy不安全, 請用snprintf 05/30 16:02
LPH66:應該說你只要知道strncpy「沒」幫你做什麼事那就行了 05/30 18:51
LPH66:如果不知道的話還是照樓上說的用 snprintf 05/30 18:51
linotwo:if(strlen(argv[2]) >= sizeof(inseq)) { 例外處理 } 05/30 20:31
descent:strdup 05/30 22:21
AstralBrain:就是因為知道strncpy少做什麼事 所以才要用snprintf 05/31 09:14
AstralBrain:知道strncpy有洞就會去多寫一行檢查 05/31 09:16
AstralBrain:不知道的反而可以安心使用XD 05/31 09:16
james732:strncpyy少做的事是結束字元嗎?我也被咬過好幾次XD 05/31 10:42