[爆卦]c gets用法是什麼?優點缺點精華區懶人包

為什麼這篇c gets用法鄉民發文收入到精華區:因為在c gets用法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者soheadsome (師大狗鼻哥)看板C_and_CPP標題Re: [問題] string g...


※ 引述《ga544523 (美麗新世界)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: c++
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: string
: iostream
: 問題(Question):
: 1.這是我打的一個用string的爛東東
: 自己在vc2010c++上執行時會出錯
: 但用線上編譯器ide執行時卻好像沒問題
: 請問這到底是?
: http://ideone.com/PL1Lx0

首先 std::string 實作品

沒有保證最後一個字元一定是'\0'(或是0)

我忘了是看c++那本書有提到 應該是effective c++

所以你這樣執行有可能是undefined behavier

: 2.
: 再來就是gets
: 我知道是一個可以讓你輸入包括空白字元的字串函數
: 但好像如果gets上面有像cin scanf之類的函數
: 他就會自動忽略gets
: 像這樣
: http://ideone.com/nMoXMX
: 自己是有找到解決辦法就是在gets上面+個getchar()
: 但為什麼這樣就可以還是搞不懂
: 希望有人可以幫我解答
: 感恩喔

這問題看不是很懂

你是要說gets沒被執行到的原因嗎?

應該又是跟緩衝區有關的事情

我學c/c++到現在還是很難理解緩衝區的運作

你可以試著在每次cin後先fflush()看看

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.122.216.52
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1405784014.A.11D.html
damody:第一點講錯了 07/20 01:11
damody:中括號取不到而已 07/20 01:51
LPH66:不要混用 C++ 的 cin/cout 跟 C 的 FILE 系列函式 07/20 09:22
LPH66:也不要對 stdin 做 fflush..這邊的正解是你得想辦法吃掉換行 07/20 09:23
LPH66:做法可以是再用一個 gets 吃掉它 (也就是寫兩次, 第二次才是 07/20 09:23
LPH66:真正的讀取資料) 07/20 09:24
LPH66:如果不得已要混用 C++ 的 cin/cout 及 C 的 stdin/stdout 07/20 09:25
LPH66:請先執行 cout.sync_with_stdio(); 07/20 09:26
soheadsome:第一點不對嗎 中括號取不到 應該代表沒保證嗎? 07/20 09:32
soheadsome:我晚點再去翻出這篇章好了 07/20 09:33
scwg:C++98 和 11 都允許 s[s.size()] 並回傳 (reference to) '\0' 07/20 10:50
scwg:原 po 看到的應該是說 s[i] == '\0' 「沒有保證是最後一個字 07/20 10:51
scwg:元」 07/20 10:51
Caesar08:http://ppt.cc/ggUJ 看起來是11之後才有保證 07/20 14:51
如果是11才有保證 原po在VS10出問題應該算正常的吧?
※ 編輯: soheadsome (140.122.216.52), 07/21/2014 00:10:35
scwg:huh, cppreference.com 比 cplusplus.com 更接近標準 07/21 00:10
scwg:要 c++98 compliance 要寫 const_cast<const string&>(a)[i] 07/21 00:11
原來還可以這樣XD
※ 編輯: soheadsome (140.122.61.235), 07/21/2014 11:46:55

你可能也想看看

搜尋相關網站