Для расширения Sparr's answer
Инициализация и назначение двух различных операций, которые происходят использовать один и тот же оператор («=») здесь.
Думай об этом, как это:
Представьте себе, что есть 2 функции, называемые InitializeObject
и AssignObject
.Когда компилятор видит thing = value
, он просматривает контекст и называет один InitializeObject
, если вы делаете новый thing
. Если вы этого не сделаете, вместо этого он называет AssignObject
.
Обычно это нормально, так как InitializeObject
и AssignObject
обычно ведут себя одинаково. За исключением случаев, когда дело касается массивов символов (и нескольких других случаев краев), и в этом случае они ведут себя по-разному. Зачем это делать? Ну, это целая другая статья с участием стека против кучи и т. Д. И т. Д.
PS: Как и в сторону, думая о ней, таким образом, также поможет вам понять, конструкторы копирования и другие подобные вещи, если вы когда-либо предприятие в C++
Хороший ответ, за исключением того, что вы никогда не должны использовать простой strcpy. Используйте strncpy или strlcpy. – dwc
Кроме того, s должен быть const char *, а не char *. – aib
's [0] = 'x'; s [1] = 'y'; s [2] = 'z'; s [3] = 'm'; 'работает, если вы хотите заменить символы строки один за другим даже после инициализации. – RBT