E se volessi stampare una stringa, dì printf ("ciao") anche se ho scoperto che non termina con \ 0 seguendo le istruzioni
printf("%d", printf("hello"));
Output: 5
Tui hai torto. Questa affermazione non conferma che la stringa letterale "hello"
non termina con il carattere zero finale '\0'
. Questa affermazione ha confermato che la funzione printf
genera elementi di una stringa fino a quando non viene rilevato il carattere di zero finale.
Quando si utilizza una stringa letterale come nell'istruzione precedente, il compilatore crea una matrice di caratteri con la durata di memorizzazione statica che contiene elementi della stringa letterale.
Quindi in realtà questa espressione
printf("hello")
viene elaborato dal compilatore in modo simile al seguente
static char string_literal_hello[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
printf( string_literal_hello );
L'azione della funzione printf in questo si può immaginare nel modo seguente
int printf( const char *string_literal )
{
int result = 0;
for ( ; *string_literal != '\0'; ++string_literal )
{
putchar( *string_literal );
++result;
}
return result;
}
Per ottenere il numero di caratteri memorizzati nella stringa letterale "ciao" puoi eseguire il seguente programma
#include <stdio.h>
int main(void)
{
char literal[] = "hello";
printf( "The size of the literal \"%s\" is %zu\n", literal, sizeof( literal ) );
return 0;
}
L'output del programma è
The size of the literal "hello" is 6
);
, cosa intendi mostrare con quel codice? Come hai dimostrato che non finisce con un\0
?