配列を初期化するとき、C では配列に値を入力できます。だから
char s[100] = "abcd";
基本的には
と同じですint s[3] = { 1, 2, 3 };
s
以降、割り当てを行うことはできません は配列であり、フリー ポインターではありません。
s = "abcd"
abcd
のポインター値を割り当てることです s
まで ただし、s
は変更できません それ以降、配列を指すものは何もありません。
これは s
の場合に機能します。 char*
です - 何でも指すことができるポインター。
文字列を単純にコピーする場合は、 strcpy
を使用します .
C には「文字列」というものはありません。C では、文字列は char
の一次元配列です。 、ヌル文字 \0
で終了 . C では配列を割り当てることができないため、文字列を割り当てることもできません。リテラル "hello" は const char x[] = {'h','e','l','l','o','\0'};
のシンタックス シュガーです
正しい方法は次のとおりです:
char s[100];
strncpy(s, "hello", 100);
さらに良いことに:
#define STRMAX 100
char s[STRMAX];
size_t len;
len = strncpy(s, "hello", STRMAX);
初期化と割り当ては、たまたま同じ演算子 ("=") を使用する 2 つの異なる操作です。