我通過將一個字符與一個空字串 ("") 連接來將它轉換為一個字串。但它會導致結果字串中出現未定義的行為或垃圾字符。為什么這樣?
char c = 'a';
string s = "" c;
cout<<s<<" "<<s.size()<<"\n";
uj5u.com熱心網友回復:
讓我們一次看一下您的片段,一個陳述句或一行。
char c = 'a';
這是有效的,將字符文字分配給 type 的變數char。
注意:由于c在此陳述句之后沒有更改,您可能希望將定義宣告為 const。
string s = "" c;
讓我們重構:
std::string s = ("" c);
讓我們添加型別轉換以使這一點更清楚:
std::string s = ((const char *) "" (char) c);
操作的順序是在分配給字串變數之前決議賦值運算子右側(rhs)的所有運算式。
operator ()C 中沒有一個const char *和一個字符。
編譯器正在尋找這個函式: operator (const char *, char).
這是編譯錯誤的主要原因。
cout<<s<<" "<<s.size()<<"\n";
字串分配和創建失敗,因此s為空且s.size()為零。
uj5u.com熱心網友回復:
一個有趣的問題,看起來像是編譯器在編譯時沒有檢測到的問題。
我已經在 Cygwin 上使用 GNU C 10.2 進行了嘗試,您的代碼片段生成了這個。
0200312 (Fedora Cygwin 9.3.0-1) 31
如果你char c = 'c';用char c = '\0';輸出替換是
0
所以看起來像是某種記憶體違規問題。
您可能知道,附加 char 的標準方法是使用push_back
string s = "";
s.push_back(c);
cout << s << " " << s.size() << "\n";
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/479435.html
