2012-08-28 14 views
9

¿Cuál es la diferencia entre:Asignación de matriz de caracteres un valor en C

char fast_car[15]="Bugatti"; 

y

char fast_car[15]; 
fast_car="Bugatti"; 

Dado que el segundo uno resultados con error de compilación:

error: incompatible types when assigning to type ‘char[15]’ from type ‘char *’

Mientras que la primera uno funciona bien Poner una cadena en una matriz en un lugar diferente de la inicialización de la matriz sería útil.

+1

Puede usar una función de cadena como 'snprintf' o' strncpy' para llenar la matriz con un nuevo valor –

+3

No use 'strncpy' a menos que realmente esté realmente seguro de que eso es lo que quiere. Asegúrese de que el buffer sea lo suficientemente grande y use 'strcpy' en su lugar. – harald

+0

@harald ¿por qué usar strncpy es una mala idea? por lo general, evita el desbordamiento. – hardpenguin

Respuesta

10

La primera es una inicialización de mientras que la segunda es una asignación de . Como las matrices no son valores modificables en C, no puede asignarles nuevos valores.

Eso sí, puede modificar los contenidos de la matriz, simplemente no puede decir fast_car = .... Entonces los contenidos son modificables, los arreglos no son.


Usando el mismo símbolo = para estos conceptos es ampliamente diferentes de valor discutible.

+2

'str_replace (" modificable "," mutable ");';) –

+2

@Nick: la sustitución de cadenas no es tan simple en C;) –

+0

@cnicutar, ¿me puede sugerir otra solución? Se trata de asignar manualmente algunas variables de matriz de la estructura. Usar el puntero para char funciona, pero ¿no es una mala solución para administrar la memoria? – hardpenguin

3
char fast_car[15]="Bugatti"; 

Dice que fast_car es una matriz y se inicializa con la cadena "Buratti". Uso correcto:

char fast_car[15]; 
fast_car="Bugatti"; 

La primera línea es una declaración de matriz de caracteres (no inicializada). Segundo, fast_car aquí es solo una dirección (un puntero) del primer elemento en esta matriz de char. La asignación del puntero fast_car al array de char "Buratti" es incorrecta por tipo de valor de diferencia.

Cuestiones relacionadas