首頁 > 後端開發 > C++ > 主體

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

Barbara Streisand
發布: 2024-10-25 07:35:28
原創
206 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!