Red de conocimiento informático - Conocimiento informático - La diferencia específica entre la longitud de la cadena y la longitud de la matriz

La diferencia específica entre la longitud de la cadena y la longitud de la matriz

¡Hola!

Comencemos con un ejemplo:

Código:

#includelt;iostream.hgt;

#includelt;string . hgt;

int main()

{

char a []={'a', 'b', 'c'}; >

p>

coutlt;lt; "Cadena a:"lt;lt;alt;lt;endl;

coutlt;lt; "Tamaño de la matriz:"lt;lt;sizeof (a)lt ;lt;endl;

coutlt;lt; "El tamaño de la matriz: "lt;lt;strlen(a)lt;lt;endl;

coutlt ;lt;endl;

char b[5]={'a','b','c'};

coutlt;lt; "Cadena b:" lt; lt;blt;lt; endl;

coutlt;lt; "Tamaño de matriz: "lt;lt;sizeof(b)lt;lt;endl;

coutlt;lt; Tamaño de la matriz: "lt; lt; strlen(b)lt; lt; endl;

Devuelve 0;

}

Resultado:

Cadena a: sopa abc?

Tamaño de matriz: 3

Tamaño de matriz: 7

Cadena b: abc

Tamaño de matriz : 5

Tamaño de la matriz: 3

Presione cualquier tecla para continuar

Primero, debemos saber: sizeof() intenta asignar la longitud del archivo en la memoria.

strlen() implica cuánto espacio se usa realmente en la memoria, lo que significa que aunque se asigna una gran cantidad de espacio, todavía hay una gran cantidad de espacio que no se usa y está vacío.

También es importante saber que el final de la cadena es "\0", que es el carácter nulo!!!

char a[]={'a','b','c'}; significa que el primer, segundo y tercer elemento de byte de la matriz dada son a, b, c y respectivamente. El tamaño de la matriz se desconoce en este momento, lo que significa que el sistema ha asignado al menos 3 bytes de memoria en la pila. Si la matriz se almacena continuamente en la pila, ¿cuántas matrices posteriores hay? Si desea generar una cadena en este momento, al generar a, b, c, el indicador de fin se asigna al asignar (el sistema no agregará automáticamente el indicador de fin al asignar caracteres uno por uno), por lo que la matriz se mantendrá. moviéndose hacia atrás hasta encontrar la marca de final. Puede ver la cadena a en esta pregunta: abc Soup?

Entre los 5 bytes de a, b, c y el espacio, un carácter chino tiene 2 bytes, por lo que el tamaño de la matriz es 7 bytes, ¡pero el carácter asignado real es solo 3 bytes!

Matriz b: char b[5]={'a', 'b', 'c'}; el tamaño de la matriz es de 5 bytes, y en realidad solo se utilizan 3 bytes. siguiente Un byte es '\0' y tanto la entrada como la salida son correctas.

Si no entiendes nada, ¡¡¡contáctanos!!!!