Salidas distintas en cálculos de longitud y tamaño de cadena para inicialización de cadena basada en puntero y basada en matriz
Comprensión de los resultados
Al crear una cadena str1 basada en puntero y una cadena str2 basada en matriz con el mismo valor, las funciones strlen y sizeof producen resultados diferentes. Específicamente, para las declaraciones:
char *str1 = "Sanjeev";
char str2[] = "Sanjeev";
strlen devuelve 7 tanto para str1 como para str2, ya que mide la longitud de la secuencia de caracteres, excluyendo el terminador nulo (\0) al final.
Sin embargo, sizeof produce valores diferentes:
El Diferencia subyacente: tipo de datos versus asignación de memoria
sizeof mide el tamaño del tipo de datos, mientras que strlen mide la longitud de la secuencia de caracteres. En el caso de str1, es un puntero a un carácter, por lo que sizeof devuelve el tamaño del puntero. Para str2, es una matriz de caracteres, por lo que sizeof devuelve el tamaño de toda la matriz, incluido el terminador nulo.
Una mirada más cercana
Para demostrar la distinción mejor, considere:
char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;
Ahora, tanto str1 como str2 apuntan a la misma matriz. Sus valores strlen son 7, pero sus valores sizeof difieren:
Esto ejemplifica cómo la evaluación del tamaño depende de la estructura de datos subyacente.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3