首頁  >  文章  >  後端開發  >  為什麼在 C 中將字元連接到字串有時會導致意外的輸出?

為什麼在 C 中將字元連接到字串有時會導致意外的輸出?

Barbara Streisand
Barbara Streisand原創
2024-10-25 07:35:28207瀏覽

Why Does Concatenating a Character to a String in C   Sometimes Lead to Unexpected Output?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn