PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
Re: [問題] string gets的用法
作者:
soheadsome
(師大狗鼻哥)
2014-07-19 23:33:25
※ 引述《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()看看
作者:
damody
(天亮damody)
2014-07-20 01:11:00
第一點講錯了中括號取不到而已
作者:
LPH66
(-6.2598534e+18f)
2014-07-20 09:22:00
不要混用 C++ 的 cin/cout 跟 C 的 FILE 系列函式也不要對 stdin 做 fflush..這邊的正解是你得想辦法吃掉換行做法可以是再用一個 gets 吃掉它 (也就是寫兩次, 第二次才是真正的讀取資料)如果不得已要混用 C++ 的 cin/cout 及 C 的 stdin/stdout請先執行 cout.sync_with_stdio();
作者:
soheadsome
(師大狗鼻哥)
2014-07-20 09:32:00
第一點不對嗎 中括號取不到 應該代表沒保證嗎?我晚點再去翻出這篇章好了
作者:
scwg
( )
2014-07-20 10:50:00
C++98 和 11 都允許 s[s.size()] 並回傳 (reference to) '\0'原 po 看到的應該是說 s[i] == '\0' 「沒有保證是最後一個字元」
作者:
Caesar08
(Caesar)
2014-07-20 14:51:00
" target="_blank" rel="nofollow">
看起來是11之後才有保證
作者:
scwg
( )
2014-07-21 00:10:00
huh, cppreference.com 比 cplusplus.com 更接近標準要 c++98 compliance 要寫 const_cast<const string&>(a)[i]
繼續閱讀
[問題] string gets的用法
ga544523
[問題] 類似photo shop 上一步、下一步做法
milk78522
Re: [問題] 編碼or密碼學,達到資料回復
DJWS
[問題] 關於輸出控制換行
oklp1415
[問題] UVa 100-The 3n+1 problem
annie84080
[問題] 錯誤程式碼
kenn2001
[問題] 用string讀取整個file的問題
feanor
[問題] A陣列由B陣列內容指定加總
blu1121
[問題] C的precision判斷
yuanchris1
[問題] opencv開視訊 記憶體飆升(續)
li4288
Links
booklink
Contact Us: admin [ a t ] ucptt.com