Edycja: OP (lub redaktor) po cichu zmienił niektóre pojedyncze cudzysłowy w oryginalnym pytaniu na podwójne cudzysłowy w pewnym momencie po udzieleniu tej odpowiedzi.
Twój kod spowoduje błędy kompilatora. Twój pierwszy fragment kodu:
char buf[10] ; buf = ''
jest podwójnie nielegalne. Po pierwsze, w C nie ma czegoś takiego jak pusty char
. Możesz użyć podwójnych cudzysłowów, aby oznaczyć pusty ciąg, tak jak w przypadku:
char* buf = "";
To da ci wskaźnik do NUL
łańcucha, tj. Jednoznakowego łańcucha zawierającego tylko NUL
znak. Ale nie możesz używać pojedynczych cudzysłowów, które nie zawierają niczego - to jest nieokreślone. Jeśli chcesz wyznaczyć NUL
postać, musisz to określić:
char buf = '\0';
Ukośnik odwrotny jest niezbędny do ujednoznacznienia znaku '0'
.
char buf = 0;
prowadzi do tego samego, ale myślę, że to pierwsze jest nieco mniej dwuznaczne.
Po drugie, nie można zainicjować tablic po ich zdefiniowaniu.
char buf[10];
deklaruje i definiuje tablicę. Identyfikator tablicy buf
jest teraz adresem w pamięci i nie można zmienić miejsca buf
wskazującego poprzez przypisanie. Więc
buf = // anything on RHS
jest nielegalne. Z tego powodu Twoje drugie i trzecie fragmenty kodu są nielegalne.
Aby zainicjować tablicę, musisz to zrobić w momencie definiowania:
char buf [10] = ' ';
poda 10-znakową tablicę, gdzie pierwszy znak to spacja, '\040'
a reszta to NUL
np '\0'
. Gdy tablica jest zadeklarowana i zdefiniowana za pomocą inicjatora, elementy tablicy (jeśli istnieją) poza tymi z określonymi wartościami początkowymi są automatycznie uzupełniane 0
. Nie będzie żadnej „przypadkowej zawartości”.
Jeśli zadeklarujesz i zdefiniujesz tablicę, ale jej nie zainicjujesz, jak w poniższym przykładzie:
char buf [10];
będziesz mieć losową zawartość wszystkich elementów.