¿Cuál es la diferencia entre cadenas y matrices de caracteres en lenguaje C?
Estoy de acuerdo con los diferentes métodos de manejo mencionados por los internautas anteriores, permítanme mejorarlos.
1. String
"ABC"//Esta es una constante de cadena (también llamada literal de cadena)
El ejemplo anterior es un carácter La cadena parece tener 3 caracteres, pero el procesamiento real es de 4 caracteres, incluido el carácter '\0' después de C, que es el carácter nulo. El compilador deja de procesar cuando encuentra un carácter nulo.
En programación, también puedes colocar la cadena en una matriz de cadenas para procesarla:
char str1[] = "ABC" //El compilador calculará automáticamente la longitud de la cadena. string
char str2[20] = "ABC"; //Esta es una matriz de cadenas
El contenido entre comillas dobles se considera un puntero a la ubicación de almacenamiento de la cadena. , similar a usar el nombre de la matriz como puntero a la ubicación de la matriz.
También puedes inicializar una matriz de cadenas como esta:
char str3 [4] = {'A', 'B', 'C', '\0'} / / La longitud de la matriz de cadenas debe ser 1 más que la longitud de la cadena para poder acomodar '\0'
Nota: Sin el último carácter nulo, esto no es una cadena, sino una matriz de caracteres, por lo que Los elementos no inicializados se inicializan automáticamente con el carácter nulo '\0'.
No inicialices matrices de cadenas como esta:
char dont [] = {'A', 'B', 'C'}
This; compilador No sabrá dónde detenerse hasta que encuentre el carácter nulo más cercano en la memoria. Afortunadamente, hay muchos caracteres nulos en la memoria y no tomará mucho tiempo.
2. Matriz de caracteres
La mayor diferencia entre la matriz de caracteres y la matriz de cadenas es que el rango de procesamiento es diferente. La matriz de cadenas finaliza cuando encuentra un carácter nulo, mientras que la matriz de caracteres se puede procesar de acuerdo con ello. a los deseos del programador. Necesidad de controlar la duración del procesamiento. Pero al igual que la matriz de cadenas, el último carácter de la matriz de caracteres también debe ser un carácter nulo. No se puede compilar la siguiente inicialización:
char str4 [1] = {'A', 'B'} ; //Error: se establecen demasiados valores iniciales
Al declarar una matriz (incluida una matriz de caracteres), el tamaño de la matriz debe ser un número entero evaluable. Antes de que C99 agregara matrices de longitud variable, el tamaño de la matriz debe ser una constante entera, incluidas las expresiones compuestas de constantes enteras.
int n = 8;
char str5[2*sizeof(int) 1]; //válido
char str6[n]; Una matriz válida de longitud variable
Los desarrolladores pueden procesar matrices de caracteres mediante programación según sea necesario sin cruzar el límite.
A diferencia del procesamiento de cadenas, cuando encuentra un carácter nulo, el compilador continuará procesando los datos después del carácter nulo.
Por ejemplo:
char str7 [3] = {'A', '\0', 'C'};
str7[1] = 'B';