[問題] argv[2] copy到一個宣告好的char[20]?

看板C_and_CPP (C/C++)作者 (Dustin)時間14年前 (2012/05/29 18:37), 編輯推噓4(4010)
留言14則, 10人參與, 最新討論串1/1
開發平台(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

05/29 18:58, , 1F
你可以用strlen算字串的長度 再動態宣告就好
05/29 18:58, 1F

05/29 19:40, , 2F
這個也能討論XD,還不就複製而己嗎= =?
05/29 19:40, 2F

05/29 19:43, , 3F
要說隱含出錯問題的話,大概會扯到 buf.ov.attack 吧.
05/29 19:43, 3F

05/30 01:02, , 4F
有n的版本就用n,相信我
05/30 01:02, 4F

05/30 15:09, , 5F
要相信樓上
05/30 15:09, 5F

05/30 16:02, , 6F
strncpy不安全, 請用snprintf
05/30 16:02, 6F

05/30 18:51, , 7F
應該說你只要知道strncpy「沒」幫你做什麼事那就行了
05/30 18:51, 7F

05/30 18:51, , 8F
如果不知道的話還是照樓上說的用 snprintf
05/30 18:51, 8F

05/30 20:31, , 9F
if(strlen(argv[2]) >= sizeof(inseq)) { 例外處理 }
05/30 20:31, 9F

05/30 22:21, , 10F
strdup
05/30 22:21, 10F

05/31 09:14, , 11F
就是因為知道strncpy少做什麼事 所以才要用snprintf
05/31 09:14, 11F

05/31 09:16, , 12F
知道strncpy有洞就會去多寫一行檢查
05/31 09:16, 12F

05/31 09:16, , 13F
不知道的反而可以安心使用XD
05/31 09:16, 13F

05/31 10:42, , 14F
strncpyy少做的事是結束字元嗎?我也被咬過好幾次XD
05/31 10:42, 14F
文章代碼(AID): #1FnARukS (C_and_CPP)
文章代碼(AID): #1FnARukS (C_and_CPP)