Menu

Category

Archive

logo


char *s = "aaa" と char s[] = "aaa" の違い

2014-05-24 15:30:00 +0900
  • このエントリーをはてなブックマークに追加

細かいですが、ちょっと個人的にメモしておきたい違い。

1
2
3
char *s = "abcdef";
strcpy(s, "ghijkl");
printf("%s",s);

このコードは動きません。理由は、”abcdef” が string literal で read-only のため。s ポインターはこの string literal を指しているので、strcpy() に渡しても、エラーになります。つまり、s は、

1
const char *s = "abcdef";

と同じ。

それに対して、

1
2
3
char s[] = "abcdef";
strcpy(s, "ghijkl");
printf("%s",s);

は期待した通りの結果を返します。こちらの s は、char の配列を定義してます。そして、これはスタックにロードされるので、変更可能。