Para ampliar Sparr's answer
Inicialización y asignación son dos operaciones distintas que pasan a utilizar el mismo operador ("=") aquí.
Piense en ello como esto:
Imagínese que hay 2 funciones, llamadas InitializeObject
, y AssignObject
.Cuando el compilador ve thing = value
, mira el contexto y llama a uno InitializeObject
si está creando un nuevo thing
. Si no lo está, en su lugar llama al AssignObject
.
Normalmente esto está bien ya que InitializeObject
y AssignObject
suelen comportarse de la misma manera. Excepto cuando se trata de arreglos de caracteres (y algunos otros casos extremos), en cuyo caso se comportan de manera diferente. ¿Por qué hacer esto? Bueno, esa es una publicación completamente distinta que involucra a la pila frente al montón, y así sucesivamente.
PD: Como acotación al margen, pensando que de esta manera también ayudará a entender constructores de copia y otras cosas si alguna vez se aventura en C++
Buena respuesta, excepto que nunca debería usar plain strcpy por más tiempo. Use strncpy o strlcpy. – dwc
Además, s debe ser const char *, no char *. – aib
's [0] = 'x'; s [1] = 'y'; s [2] = 'z'; s [3] = 'm'; 'funciona si uno quiere reemplazar los caracteres de cadena uno por uno, incluso después de la inicialización. – RBT