Я знаю, что на этот вопрос уже был дан ответ, но я хотел бы поделиться ответом, который я дал кому-то, кто задал очень похожий вопрос в группе C / C ++ Facebook.
Массивы не имеют функций оператора присваивания *. Это означает, что вы не можете просто присвоить массив символов строковому литералу. Зачем? Потому что сам массив не имеет оператора присваивания. (* Это константный указатель, который нельзя изменить.)
массивы - это просто область непрерывной выделенной памяти и имя
массива на самом деле является указателем на первый элемент массива.
(Цитата из https://www.quora.com/Can-we-copy-an-array-using-an-assignment-operator)
Чтобы скопировать строковый литерал (например, "Hello world"
или "abcd"
) в массив char, необходимо вручную скопировать все элементы char строкового литерала в массив.
char s[100];
Это инициализирует пустой массив длиной 100.
Теперь, чтобы скопировать строковый литерал в этот массив, используйте strcpy
strcpy(s, "abcd");
Это скопирует содержимое строкового литерала "abcd"
и скопирует его в массив s[100]
.
Вот отличный пример того, что он делает:
int i = 0; //start at 0
do {
s[i] = ("Hello World")[i]; //assign s[i] to the string literal index i
} while(s[i++]); //continue the loop until the last char is null
Вы, очевидно, должны использовать strcpy
вместо этого пользовательского строкового литерала, но это хороший пример, который объясняет, как strcpy
в основном работает.
Надеюсь, это поможет!