Modifica: OP (o un editore) ha silenziosamente modificato alcune delle virgolette singole nella domanda originale in virgolette doppie ad un certo punto dopo aver fornito questa risposta.
Il codice provocherà errori del compilatore. Il tuo primo frammento di codice:
char buf[10] ; buf = ''
è doppiamente illegale. Primo, in C, non esiste un vuoto char
. Puoi usare le virgolette per designare una stringa vuota, come con:
char* buf = "";
Questo ti darà un puntatore a una NUL
stringa, cioè una stringa di un solo carattere contenente solo il NUL
carattere. Ma non puoi usare virgolette singole senza nulla al loro interno - questo è indefinito. Se devi designare il NUL
personaggio, devi specificarlo:
char buf = '\0';
Il backslash è necessario per disambiguare il carattere '0'
.
char buf = 0;
compie la stessa cosa, ma il primo è un po 'meno ambiguo da leggere, credo.
In secondo luogo, non è possibile inizializzare gli array dopo che sono stati definiti.
char buf[10];
dichiara e definisce l'array. L'identificatore di matrice buf
è ora un indirizzo in memoria e non è possibile modificare i buf
punti in cui si trova tramite assegnazione. Così
buf = // anything on RHS
è illegale. Il secondo e il terzo frammento di codice sono illegali per questo motivo.
Per inizializzare un array, devi farlo al momento della definizione:
char buf [10] = ' ';
vi darà una matrice 10 caratteri con il primo carattere essendo lo spazio '\040'
e l'essere resto NUL
, cioè '\0'
. Quando un array viene dichiarato e definito con un inizializzatore, gli elementi dell'array (se presenti) oltre quelli con valori iniziali specificati vengono automaticamente riempiti con 0
. Non ci sarà alcun "contenuto casuale".
Se dichiari e definisci l'array ma non lo inizializzi, come nel seguente:
char buf [10];
avrai contenuti casuali in tutti gli elementi.