亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么將NULL發送到std :: cout輸出后完全消失

為什么將NULL發送到std :: cout輸出后完全消失

C++
HUWWW 2019-09-26 15:10:25
為什么將NULL發送到std :: cout輸出后完全消失我花了好一會兒才弄清楚為什么某些cout輸出似乎消失在以太幣中了。罪魁禍首:std::cout<< "This line shows up just fine" << std::endl;const char* some_string = a_function_that_returns_null();if (some_string == 0)     std::cout<< "Let's check the value of some_string: " << some_string << std::endl;std::cout<< "This line and any cout output afterwards will not show up" << std::endl;上面代碼段的輸出將是:This line shows up just fineLet's check the value of some_string:因此,將NULL輸入cout將會禁用以后的所有輸出。為什么?以及如何解決?這并不是一直都發生的-具有相同代碼的同事會獲得所有預期的輸出。而且,如果您想知道為什么我不能僅通過if語句阻止將NULL饋入cout:我正在大型代碼庫中工作,并且不知道在哪里發生這種情況!我所知道的是我從來沒有出現過的cout陳述。更多信息:a_function_that_returns_null()實際上是getenv("HOST")。我通過在命令行上檢查echo $HOSTHOST變量是否為空。如果我這樣做export HOST=(bash風格),則輸出全部存在。getenv在修改HOST變量之前,我不知道HOST變量最初包含什么,也不知道最初返回什么。我所知道的(some_string == 0)是真的。
查看完整描述

3 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

我相當確定這cout << (char*)NULL具有未定義的行為。恐怕“不要那樣做”是我可以提供的最佳建議。


查看完整回答
反對 回復 2019-09-26
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

當您嘗試輸出時const char*,流將打印所有字節,直到到達為止'\0'。這導致未定義的行為。例如,您可以打印一些控制符號(即'\n','\r'等等),并得到不可預測的結果。

編輯:實際上,NULL指針的流式傳輸足以獲取UB。由于有用的評論,我不會刪除我的答案。


查看完整回答
反對 回復 2019-09-26
  • 3 回答
  • 0 關注
  • 859 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號