Pero, ¿y si quisiera imprimir una cadena? Diga printf ("hola") aunque he descubierto que no termina con \ 0 siguiendo la siguiente instrucción
printf("%d", printf("hello"));
Output: 5
Está usted equivocado. Esta declaración no confirma que el literal de cadena "hello"
no termine con el carácter de terminación cero '\0'
. Esta declaración confirmó que la función printf
genera elementos de una cadena hasta que se encuentra el carácter cero final.
Cuando usa un literal de cadena como en la declaración anterior, el compilador crea una matriz de caracteres con la duración del almacenamiento estático que contiene elementos del literal de cadena.
De hecho, esta expresión
printf("hello")
es procesado por el compilador algo como lo siguiente
static char string_literal_hello[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
printf( string_literal_hello );
La acción de la función printf en esto se puede imaginar de la siguiente manera
int printf( const char *string_literal )
{
int result = 0;
for ( ; *string_literal != '\0'; ++string_literal )
{
putchar( *string_literal );
++result;
}
return result;
}
Para obtener el número de caracteres almacenados en la cadena literal "hola", puede ejecutar el siguiente programa
#include <stdio.h>
int main(void)
{
char literal[] = "hello";
printf( "The size of the literal \"%s\" is %zu\n", literal, sizeof( literal ) );
return 0;
}
La salida del programa es
The size of the literal "hello" is 6
);
, ¿qué piensa mostrar con ese código? ¿Cómo has demostrado que no termina con un\0
?