## C で文字列リテラルと文字リテラルを連結すると予期しない結果が生じるのはなぜですか?

Linda Hamilton
リリース: 2024-10-25 07:56:29
オリジナル
525 人が閲覧しました

## Why Does Concatenating a String Literal and a Character Literal in C   Lead to Unexpected Results?

難問: C での文字列と文字の連結の謎

C で文字列リテラルと文字リテラルを連結しようとすると、予期しない動作が発生する生じる可能性があります。次のコードを考えてみましょう:

<code class="cpp">string str = "ab" + 'c';
cout << str << endl;</code>
ログイン後にコピー

興味深いことに、この行の出力は「abc」になります。この謎を解明するには、基礎となる操作を理解することが重要です。

内部では、コンパイラーは文字列リテラル「ab」を C スタイルの文字列として解釈し、文字リテラル 'c' を整数値として解釈します。これらの型では文字列の連結が定義されていないため、コンパイラは整数値「c」を文字列リテラルのアドレスに追加します。

この操作は、文字列に割り当てられたメモリを超過するため、予測できない結果を招く可能性があります。 。その結果、プログラムは、null 文字が見つかるまで、結果のアドレスから文字を出力する可能性があります。

この問題を解決するには、いくつかの方法が考えられます。まず、キャストを使用して文字リテラルを文字列に明示的に変換できます:

<code class="cpp">string str = std::string("ab") + 'c';</code>
ログイン後にコピー

または、直感的な連結を実行する文字列連結演算子を使用できます:

<code class="cpp">string str = "ab";
str += 'c';</code>
ログイン後にコピー

2 番目のケースでは、文字列クラスのオーバーロードされた演算子メソッドがシームレスな連結に利用されます。

以上が## C で文字列リテラルと文字リテラルを連結すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート