ホームページ > バックエンド開発 > C++ > C での文字列の代入

C での文字列の代入

Mary-Kate Olsen
リリース: 2025-01-26 08:03:09
オリジナル
1016 人が閲覧しました

提供されたテキストは、文字ポインター(char *string)とキャラクター配列(char string[])を使用して文字列を保存および変更することの違いを説明しています。

Cコードの例は、ポインターと配列の重要な区別を示しています。多くの場合、初心者の混乱の原因です。 これらのスニペットを考慮してください:

Assigning strings in C

例1(セグメンテーション障害):

<code class="language-c">#include <stdio.h>
int main(void) {
    char *string = "Wello, world!"; // string is a pointer
    string[0] = 'H';              // Attempting to modify a read-only string
    puts(string);
}</code>
ログイン後にコピー
このコードは、セグメンテーション障害をもたらします。 なぜ?なぜなら、

はキャラクターに対してstringポインターとして宣言されるためです。 このポインターは、通常、読み取り専用メモリに保存される文字列(「Wello、World!」)を指すように初期化されます。 この読み取り専用メモリの内容を変更しようとすると、セグメンテーション障害が発生します(メモリアクセス違反)。

例2(成功した変更):

このコードは「Hello、World!」に正常に印刷されます。 ここでは、
<code class="language-c">#include <stdio.h>
int main(void) {
    char string[] = "Wello, world!"; // string is an array
    string[0] = 'H';              // Modifying a writable copy of the string
    puts(string);
}</code>
ログイン後にコピー

文字配列stringとして宣言されています。コンパイラは、スタック上のスペースを割り当てて、文字列のコピーをリテラルに保持します。 このコピーは書き込み可能で、エラーを引き起こすことなくの変更を可能にします。 string[0]キーの違い:

基本的な違いは、文字列の保存方法にあります。 例1では、文字列の文字通りは読み取り専用メモリにあり、ポインターは単にそれを指しています。例2では、​​文字列リテラルの書き込み可能なコピー

が作成され、スタックの配列に保存されます。

結論:

ポインターと配列は、Cの異なるデータ型です。一部のコンテキストでは似ているように見える場合がありますが、特に文字列リテラルを扱う場合、動作は大きく異なる場合があります。 予期しないエラーやセグメンテーション障害を避けるために、常にこの区別に注意してください。 変更可能な文字列に文字配列を使用すると、文字列に文字列を使用するよりも一般的に安全です。

以上がC での文字列の代入の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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