簡體   English   中英

奇怪的行為

[英]strange cout behaviour

我在 Ubuntu 上編譯了一個為 Windows 開發(並適用於)的程序。 在 Ubuntu 上,我看到以下代碼:

string s = values_[9];
cout << s << endl;
cout << s << "x\n";

生產這個 output:

high
xigh

第二行的預期 output 是“highx”。 我知道 values_[9] 的值最初是從文件中讀取的(寫在 Windows 上)。 打印其他字符串似乎工作正常。

這里發生了什么?

使用通過cat -A管道傳輸的 output 運行命令。 可能s的值或由endl生成的 output 為您提供了一個'\r'字符,這通常會將 cursor 發送回行首。

編輯:進一步考慮,流浪'\r'幾乎肯定在s中,而不是在endl生產的 output 中。 我原以為可能會發生一些有趣的語言環境,但是s等於"high\r"可以解釋這些症狀。

EDIT2:如果您的系統沒有cat -A (它是 GNU 擴展),請嘗試cat -v ,或者,如果您很絕望,請嘗試od -c

您正在打印的字符串中有一個回車符'\r' 發生的事情是您打印high ,然后是回車,這使 cursor 回到行首。 然后,當您打印x時,它會覆蓋該行的第一個字母。

您應該從源文件中刪除回車符(例如使用dos2unix(1)或許多其他選項),或者在讀入文件后更改代碼以去除回車符。

可能發生的事情是values_[9]中有一個\r

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM