文字配列への文字列の割り当て

配列を初期化するとき、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 つの異なる操作です。