[問題] fgets遇到問題

看板C_and_CPP (C/C++)作者 (tim845487)時間15年前 (2011/07/12 22:36), 編輯推噓7(7019)
留言26則, 10人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我在程式中使用的函數:name_file,裡面的fgets(str,length,stdin); 只要遇到fgets就可以用鍵盤輸入一段字 但是 只要前面有scanf這個指令就會被跳過(我試過 把scanf拿掉就可以正常執行) 是stdin這個指令有什麼奇怪的限制嗎?? ... scanf("%lf",a); name_file(Dw_inv_file,length); ... 另外我原本想用gets,不過被linux警告很危險 而且好像也遇到相同問題 不知道通常最常用那些方法從鍵盤存一段字串到array或是最適合用那些函數 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.101.199

07/12 22:38, , 1F
因為scanf會送回一個換行XD
07/12 22:38, 1F

07/12 23:24, , 2F
意思是fgets會直接讀取一個換行 然後結束函數嗎
07/12 23:24, 2F

07/12 23:26, , 3F
那我可不可以用一些fgets 或getchar之類的函數吸收這個換
07/12 23:26, 3F

07/12 23:27, , 4F
可以
07/12 23:27, 4F

07/12 23:28, , 5F
行 再執行我要做的事
07/12 23:28, 5F

07/12 23:29, , 6F
感謝你
07/12 23:29, 6F

07/13 09:06, , 7F
fgets很安全,讀取input盡量使用吧
07/13 09:06, 7F

07/13 09:18, , 8F
我笑出來了...剛好就是fgets
07/13 09:18, 8F

07/13 09:42, , 9F
請愛用樓上上(?)
07/13 09:42, 9F

07/13 14:19, , 10F
fgets()很安全? are you sure?
07/13 14:19, 10F

07/13 14:42, , 11F
補一下,fgets/gets本身有少許差異,fgets會留new line.
07/13 14:42, 11F

07/13 17:13, , 12F
這個問題要手工拔掉 \n 囉
07/13 17:13, 12F

07/13 17:15, , 13F
str[strlen(str) - 1]='\0';
07/13 17:15, 13F

07/13 17:24, , 14F
樓上未必(但大多正確),"rb"時, 會是 "\r\n", 最後是-2.
07/13 17:24, 14F

07/13 17:29, , 15F
tropica小弟弟,很古老的爭議了,所以就當我回答\n的解決
07/13 17:29, 15F

07/13 17:30, , 16F
方法吧!我目前是用兩個if去做判斷dos和unix的斷行
07/13 17:30, 16F

07/13 18:26, , 17F
敢問horngsh fgets不安全在哪呢?
07/13 18:26, 17F

07/13 18:28, , 18F
= ___ =
07/13 18:28, 18F

07/13 20:15, , 19F
樓上上好像十分不滿XDDDDDDDD
07/13 20:15, 19F

07/13 21:00, , 20F
http://pastie.org/2207022 <--這也是很古老的議題了
07/13 21:00, 20F

07/13 21:02, , 21F
實際上,fgets是c字串讀取函式中,安全性最高的.但是還是
07/13 21:02, 21F

07/13 21:02, , 22F
有些不足的地方.很多人會去補強它.就降.fgets不要再生氣
07/13 21:02, 22F

07/13 22:13, , 23F
我沒有生氣呀@@ 是真的想知道
07/13 22:13, 23F

07/14 00:19, , 24F
buffer overflow attack
07/14 00:19, 24F

07/14 00:20, , 25F
fgets 沒這個問題呀
07/14 00:20, 25F

07/14 00:27, , 26F
喔 沒先看到gear_fgets 它是讓fgets比較好用
07/14 00:27, 26F
文章代碼(AID): #1E75lY4t (C_and_CPP)
文章代碼(AID): #1E75lY4t (C_and_CPP)