Mas e se eu quisesse imprimir uma string, diga printf ("olá"), embora eu descubra que ela não termina com \ 0 seguindo a instrução
printf("%d", printf("hello"));
Output: 5
Você está errado. Esta instrução não confirma que a literal da cadeia de caracteres "hello"
não termina com o caractere zero final '\0'
. Esta declaração confirmou que a função printf
gera elementos de uma sequência até que o caractere zero final seja encontrado.
Quando você está usando uma literal de cadeia de caracteres, como na instrução acima, o compilador cria uma matriz de caracteres com a duração do armazenamento estático que contém elementos da literal de cadeia de caracteres.
Então, de fato, essa expressão
printf("hello")
é processado pelo compilador, algo como o seguinte
static char string_literal_hello[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
printf( string_literal_hello );
A ação da função printf nisto você pode imaginar da seguinte maneira
int printf( const char *string_literal )
{
int result = 0;
for ( ; *string_literal != '\0'; ++string_literal )
{
putchar( *string_literal );
++result;
}
return result;
}
Para obter o número de caracteres armazenados na string literal "olá", você pode executar o seguinte 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;
}
A saída do programa é
The size of the literal "hello" is 6
);
, o que você pretende mostrar com esse código? Como você provou que não termina com a\0
?