C 中的字串和字元文字連接
在 C 中,運算子可用於字串和字元連接。但是,此行為取決於所涉及的操作數的類型。
考慮以下程式碼:
<code class="cpp">string str = "ab" + 'c'; cout << str << endl;</code>
此程式碼會如預期產生輸出「abc」。這是因為字串文字「ab」會自動轉換為 const char* 指標。字元文字“c”被提升為整數值並添加到字串文字的位址。結果是一個包含字元“abc”的新字串。
但是,請考慮以下替代方案:
<code class="cpp">char ch = 'c'; string str1 = "ab"; string str2 = str1 + ch; cout << str2 << endl;</code>
此程式碼會產生意外的輸出「ed」。
為了理解這個行為,我們首先需要觀察字串str1是string類型,而不是const char*。當我們將字元 ch 新增到字串時,編譯器會嘗試對字串物件使用重載運算子。但是,字串和字元沒有運算符重載。
為了解決這種歧義,編譯器將 ch 提升為整數並執行加法,如第一個範例所示。然而,由於結果位址指向了字串 str1 分配的內存,所以我們得到了未定義的行為。從此位址檢索字符,直到遇到空字符,從而導致意外輸出。
為了防止這種行為,我們可以在添加'c' 之前將“ab”明確轉換為字串:
<code class="cpp">string str = std::string("ab") + 'c';</code>
或者,我們可以使用連接運算符=:
<code class="cpp">string str = "ab"; str += 'c';</code>
這兩種方法都確保結果是有效的字串。
以上是為什麼在 C 中將字元連接到字串有時會導致意外的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!