24h購物| | PChome| 登入
2009-11-08 11:44:44| 人氣32,797| 回應2 | 上一篇 | 下一篇

gets() 與 scanf("%s")

推薦 0 收藏 0 轉貼0 訂閱站台

這兩個雖然都是讀取字串,
但是scanf不能讀取含有空格的字串,也就是說會把空格與空格或與換行之間當做一個字串

而gets()連換行都可以當作是一筆輸入!!

當然使用上常常跟scanf混用造成問題

假使scanf("%d")輸入數字的話 則按下Enter

gets()就會讀入一筆  所以通常要增加輸入空格scanf("%d ")

或者是增加getschar() 把換行字元讀掉

※ 假如讀入的字串不需要有空格則gets比scanf 快4倍 (當然速度只是個約略)

※ 使用gets()單獨讀取換行 其strlen(s)==0

※ 宣告的陣列個數必須比輸入多1

※ 輸入陣列  所儲存的最末端系統會自動補上'\0'這個字元

※  strlen()可是很耗時間的 若可省則用'\0'替代OVER 速度++

台長: 來源不明
人氣(32,797) | 回應(2)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 算是技巧 |
此分類下一篇:*轉貼 SPFA 演算法 (最短路徑)
此分類上一篇:內建快排 同時移動附件

chchwy
gets()老實說不太安全,因為他沒有做邊界檢查
比如說
char str[10];
gets(str); //只要讀入的字串長度>10 就炸啦
這種Buffer Overflow是很常見的軟體弱點

通常建議用fgets()來取代
fgets(str,sizeof(str),stdin);
這樣就可以完全取代gets了
2009-11-15 22:17:43
版主回應
那速度比較起來呢?
2009-11-16 08:07:53
chchwy
哈哈 gets還是快上一些,不過相差無幾了
寫ACM就沒差啦
2009-11-16 20:16:30
版主回應
為了追求極致 這一點也不能少啊!
2009-11-22 08:15:43
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文