2009-12-19 7 views
7

Sto imparando a conoscere le stringhe in C ora.Perché scanf non ha bisogno di una e commerciale per le stringhe e funziona anche bene in printf (in C)?

Come mai usare scanf per ottenere una stringa che si può fare

scanf("%s",str1); 

e per printf si può fare

printf("The string is %s\n", str1); 

Capisco che per scanf è perché la stringa è solo un personaggio array che è un puntatore, ma per printf, com'è possibile che tu possa semplicemente mettere il nome della variabile come faresti per un int o float?

risposta

10

scanf richiede l'indirizzo della variabile da leggere e i buffer di stringa sono già rappresentati come indirizzi (puntatore a una posizione in memoria o una matrice che si scompone in un puntatore).

printf fa lo stesso, trattando %s come un puntatore a stringa.

5

In C, le variabili che sono matrici diventano un puntatore al primo elemento dell'array quando vengono usate come argomenti di funzione - così il vostro scanf() vede un puntatore alla memoria (assumendo che "str1" sia un array).

Nel proprio printf(), "str1" potrebbe essere un puntatore a una stringa oa un array di caratteri (nel qual caso l'argomento visto da printf() sarebbe un puntatore al primo elemento dell'array).

+0

Più precisamente, un'espressione di tipo di matrice viene convertita implicitamente ("decadimenti") in un puntatore al primo elemento dell'array nella maggior parte ma non in tutti i contesti. Un argomento di funzione sembra essere uno dei contesti in cui avviene la conversione. –

Problemi correlati