Mais que se passe-t-il si je voulais imprimer une chaîne, dites printf ("bonjour") bien que j'ai trouvé que cela ne se termine pas par \ 0 en suivant l'instruction
printf("%d", printf("hello"));
Output: 5
Vous avez tort. Cette instruction ne confirme pas que le littéral de chaîne "hello"
ne se termine pas par le caractère zéro de fin '\0'
. Cette instruction a confirmé que la fonction printf
génère des éléments d'une chaîne jusqu'à ce que le caractère zéro de fin soit rencontré.
Lorsque vous utilisez un littéral de chaîne comme dans l'instruction ci-dessus, le compilateur crée un tableau de caractères avec la durée de stockage statique qui contient des éléments du littéral de chaîne.
En fait, cette expression
printf("hello")
est traité par le compilateur quelque chose comme ce qui suit
static char string_literal_hello[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
printf( string_literal_hello );
L'action de la fonction printf dans ce que vous pouvez imaginer de la manière suivante
int printf( const char *string_literal )
{
int result = 0;
for ( ; *string_literal != '\0'; ++string_literal )
{
putchar( *string_literal );
++result;
}
return result;
}
Pour obtenir le nombre de caractères stockés dans la chaîne littérale "bonjour", vous pouvez exécuter le programme suivant
#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 sortie du programme est
The size of the literal "hello" is 6
);
, qu'avez-vous l'intention de montrer avec ce code? Comment avez-vous prouvé que cela ne se termine pas par un\0
?