[爆卦]Linux fgets是什麼?優點缺點精華區懶人包

為什麼這篇Linux fgets鄉民發文收入到精華區:因為在Linux fgets這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者k770618x (tim845487)看板C_and_CPP標題[問題] fgets遇到問題時...


開發平台(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:http://pastie.org/2207022 <--這也是很古老的議題了 07/13 21:00
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

你可能也想看看

搜尋相關網站