#navi(../)
* char[]とchar*の違い [#hb6dd4e0]
charの配列(char[])とcharのポインタ(char*)の違いをCサンプルコードを交えて説明します。

#contents
#htmlinsertpcsp(c-top.html,c-sp.html)

* 関連記事 [#x7e6adec]
-[[bool型を使用する>宣言/bool型を使用する]]
-[[charの配列とcharのポインタの違い>宣言/charの配列とcharのポインタの違い]]
-[[enumのサンプルコード>宣言/enumのサンプルコード]]


* char[]とchar*でCサンプルコードを作成してみる [#o134b5ab]
以下にchar[]とchar*でCサンプルコードを作って実行してみます。~
サンプルコードは指定した配列部分の文字を変更するだけのものです。

** char[]のサンプルコード [#t2d4dc9e]
&ref(char1.c); (改行コードLF)
 #include <stdio.h>
 
 int main(void)
 {
     char s[] = "hello world";
 
     s[0] = 'H';
     printf("%s\n", s);
 
     return 0;
 }

以下、コンパイルして実行した時の出力です。
 $ gcc char1.c -o char1
 $ ./char1 
 Hello world

** char*のサンプルコード [#m38e5d8c]
&ref(char2.c); (改行コードLF)
 #include <stdio.h>
 
 int main(void)
 {
     char *s = "hello world";
 
     s[0] = 'H';
     printf("%s\n", s);
 
     return 0;
 }

以下、コンパイルして実行した時の出力です。
 $ gcc char2.c -o char2
 $ ./char2 
 Segmentation fault

* まとめ [#e04db26d]
char*で文字列を指定して、配列操作で値を入れ替えようとすると Segmentation fault が表示され終了してしまいます。~
これは、char*で文字列を指定すると変更不可の文字列として宣言されるためです。~
したがって、変更する場合はchar[]として宣言する必要があります。

以上、char[]とchar*の違いについての記述でした。

#htmlinsertpcsp(c-btm.html,c-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS