Re: [問題] string gets的用法

看板C_and_CPP作者 (師大狗鼻哥)時間11年前發表 (2014/07/19 15:33), 11年前編輯推噓2(2014)
留言16則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《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

07/20 01:11, , 1F
第一點講錯了
07/20 01:11, 1F

07/20 01:51, , 2F
中括號取不到而已
07/20 01:51, 2F

07/20 09:22, , 3F
不要混用 C++ 的 cin/cout 跟 C 的 FILE 系列函式
07/20 09:22, 3F

07/20 09:23, , 4F
也不要對 stdin 做 fflush..這邊的正解是你得想辦法吃掉換行
07/20 09:23, 4F

07/20 09:23, , 5F
做法可以是再用一個 gets 吃掉它 (也就是寫兩次, 第二次才是
07/20 09:23, 5F

07/20 09:24, , 6F
真正的讀取資料)
07/20 09:24, 6F

07/20 09:25, , 7F
如果不得已要混用 C++ 的 cin/cout 及 C 的 stdin/stdout
07/20 09:25, 7F

07/20 09:26, , 8F
請先執行 cout.sync_with_stdio();
07/20 09:26, 8F

07/20 09:32, , 9F
第一點不對嗎 中括號取不到 應該代表沒保證嗎?
07/20 09:32, 9F

07/20 09:33, , 10F
我晚點再去翻出這篇章好了
07/20 09:33, 10F

07/20 10:50, , 11F
C++98 和 11 都允許 s[s.size()] 並回傳 (reference to) '\0'
07/20 10:50, 11F

07/20 10:51, , 12F
原 po 看到的應該是說 s[i] == '\0' 「沒有保證是最後一個字
07/20 10:51, 12F

07/20 10:51, , 13F
元」
07/20 10:51, 13F

07/20 14:51, , 14F
http://ppt.cc/ggUJ 看起來是11之後才有保證
07/20 14:51, 14F
如果是11才有保證 原po在VS10出問題應該算正常的吧? ※ 編輯: soheadsome (140.122.216.52), 07/21/2014 00:10:35

07/21 00:10, , 15F
huh, cppreference.com 比 cplusplus.com 更接近標準
07/21 00:10, 15F

07/21 00:11, , 16F
要 c++98 compliance 要寫 const_cast<const string&>(a)[i]
07/21 00:11, 16F
原來還可以這樣XD ※ 編輯: soheadsome (140.122.61.235), 07/21/2014 11:46:55
文章代碼(AID): #1Joe_E4T (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1Joe_E4T (C_and_CPP)