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 NULznak. Ale nie możesz używać pojedynczych cudzysłowów, które nie zawierają niczego - to jest nieokreślone. Jeśli chcesz wyznaczyć NULpostać, 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 bufjest teraz adresem w pamięci i nie można zmienić miejsca bufwskazują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 NULnp '\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.