作者k770618x (tim845487)
看板C_and_CPP
標題[問題] fgets遇到問題
時間Tue Jul 12 22:36:15 2011
開發平台(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
→ firejox:因為scanf會送回一個換行XD 07/12 22:38
→ k770618x:意思是fgets會直接讀取一個換行 然後結束函數嗎 07/12 23:24
→ k770618x:那我可不可以用一些fgets 或getchar之類的函數吸收這個換 07/12 23:26
→ firejox:可以 07/12 23:27
→ k770618x:行 再執行我要做的事 07/12 23:28
→ k770618x:感謝你 07/12 23:29
推 fgets:fgets很安全,讀取input盡量使用吧 07/13 09:06
→ angleevil:我笑出來了...剛好就是fgets 07/13 09:18
推 xatier:請愛用樓上上(?) 07/13 09:42
推 horngsh:fgets()很安全? are you sure? 07/13 14:19
推 tropical72:補一下,fgets/gets本身有少許差異,fgets會留new line. 07/13 14:42
→ xatier:這個問題要手工拔掉 \n 囉 07/13 17:13
→ angleevil:str[strlen(str) - 1]='\0'; 07/13 17:15
→ tropical72:樓上未必(但大多正確),"rb"時, 會是 "\r\n", 最後是-2. 07/13 17:24
→ angleevil:tropica小弟弟,很古老的爭議了,所以就當我回答\n的解決 07/13 17:29
→ angleevil:方法吧!我目前是用兩個if去做判斷dos和unix的斷行 07/13 17:30
→ fgets:敢問horngsh fgets不安全在哪呢? 07/13 18:26
→ loveme00835:= ___ = 07/13 18:28
→ uranusjr:樓上上好像十分不滿XDDDDDDDD 07/13 20:15
→ angleevil:實際上,fgets是c字串讀取函式中,安全性最高的.但是還是 07/13 21:02
→ angleevil:有些不足的地方.很多人會去補強它.就降.fgets不要再生氣 07/13 21:02
推 fgets:我沒有生氣呀@@ 是真的想知道 07/13 22:13
推 stonehomelaa:buffer overflow attack 07/14 00:19
→ stonehomelaa:fgets 沒這個問題呀 07/14 00:20
推 stonehomelaa:喔 沒先看到gear_fgets 它是讓fgets比較好用 07/14 00:27