ホームページ > バックエンド開発 > C++ > C で文字列の配列を宣言すると、「文字列リテラルから \'char*\' への非推奨の変換」という警告が表示されるのはなぜですか?

C で文字列の配列を宣言すると、「文字列リテラルから \'char*\' への非推奨の変換」という警告が表示されるのはなぜですか?

Patricia Arquette
リリース: 2024-10-29 10:48:30
オリジナル
703 人が閲覧しました

Why do I get a

C での文字列リテラルから 'char*' への非推奨の変換

以下に示すように文字列の配列を宣言する場合:

<code class="cpp">char *colors[4] = {"red", "orange", "yellow", "blue"};</code>
ログイン後にコピー

コンパイラ警告「文字列リテラルから 'char*' への非推奨の変換です。」が表示される場合があります。

エラーについて

このエラーは次の原因で発生します。 「{}」で提供される文字列は文字列リテラルであり、プログラム コード自体の中で定義されているという事実。デフォルトでは、文字列リテラルは不変です。つまり、ポインターに書き込むなどして実行時にその内容を変更することはできません。

文字へのポインターを使用して配列を宣言すると、文字列リテラルに書き込もうとすると実行時エラーが発生しやすくなります。元の入力 (「赤」、「オレンジ」など)。これにより、元の文字列が誤って変更され、予期しない結果が生じる可能性があります。

非推奨の解決策

この問題を解決し、潜在的なランタイム エラーを回避するには、配列を宣言する必要があります。文字への const ポインタとして使用します。

<code class="cpp">const char *colors[4] = {"red", "orange", "yellow", "blue"};</code>
ログイン後にコピー

const キーワードを追加すると、文字列が不変であり、意図せず変更されないことが保証されます。

値の編集に関する考慮事項

実行時に文字列値を変更する必要があると予想される場合は、文字列リテラルを別の配列にコピーするか、strtok() などのメカニズムを使用して個々の文字を操作できます。

以上がC で文字列の配列を宣言すると、「文字列リテラルから \'char*\' への非推奨の変換」という警告が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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