C言語ポインタ文字列と配列文字列の違い

937 ワード

  • ANSI Cでは、ポインタを初期化するときに作成される文字列定数を読み取り専用として定義します.ポインタでこの文字列の値を変更しようとすると、プログラムは未定義の動作をします.一部のコンパイラでは、文字列定数は、読み取りのみが許可されているテキストセグメントに格納され、変更されないようにします.
  • 配列は文字列定数で初期化することもできる:
  •        Char a[]=”abcdefg”;
    ポインタの反対に、文字列定数によって初期化された配列は変更できます.その中の1文字は後で変更できます.
    次のようになります.
    (1)ポインタ文字列のデータの変更
        
    #include <string.h>
    #include <stdio.h>
    
    int main(){
      char *buf="ABCDEFG";
      printf("buf=%c
    ",buf[2]); buf[2]='M'; printf("end!
    "); }

    コンパイルはパスしましたが、プログラムの実行中にエラーが発生しました.
    (2)配列文字列のデータの修正
    #include <string.h>
    #include <stdio.h>
    
    int main(){
      char buf[]="ABCDEFG";
      printf("buf=%c
    ",buf[2]); buf[2]='M'; printf("buf=%s
    ",buf); printf("end!
    "); }

    プログラムが正常に動作していることがわかります.
    (----------------------------)