Düzenleme: OP (veya bir editör), bu cevabı verdikten sonra bir noktada orijinal sorudaki bazı tek alıntıları sessizce çift tırnak işareti yapacak şekilde değiştirdi.
Kodunuz derleyici hatalarına neden olacaktır. İlk kod parçanız:
char buf[10] ; buf = ''
iki kat yasadışı. İlk olarak, C'de boş diye bir şey yoktur char. Boş bir dizeyi belirtmek için çift tırnak kullanabilirsiniz, örneğin:
char* buf = "";
Bu size bir NULdizgeye bir işaretçi verecektir , yani sadece içinde NULkarakter bulunan tek karakterli bir dizge . Ancak içinde hiçbir şey olmayan tek tırnakları kullanamazsınız - bu tanımsızdır. Belirttiğiniz gerekiyorsa NULkarakteri, bunu belirtmek zorunda:
char buf = '\0';
Ters eğik çizgi karakterden ayırmak için gereklidir '0'.
char buf = 0;
aynı şeyi başarıyor, ancak ilkini okumak için biraz daha az belirsiz olduğunu düşünüyorum.
İkinci olarak, dizileri tanımlandıktan sonra başlatamazsınız.
char buf[10];
diziyi bildirir ve tanımlar. Dizi tanımlayıcısı bufartık bellekte bir adres ve nerede olduğunu değiştiremezsiniz.buf atama yoluyla işaret . Yani
buf = // anything on RHS
yasa dışıdır. İkinci ve üçüncü kod parçalarınız bu nedenle yasa dışıdır.
Bir diziyi başlatmak için, tanım anında yapmanız gerekir:
char buf [10] = ' ';
size ilk karakterin boşluk olduğu 10 karakterlik bir dizi verecektir '\040' ve geri kalan varlık NUL, yani '\0'. Bir dizi bir başlatıcı ile bildirildiğinde ve tanımlandığında, belirtilen başlangıç değerlerine sahip olanları geçen dizi öğeleri (varsa) otomatik olarak doldurulur0 . Herhangi bir "rastgele içerik" olmayacak.
Diziyi bildirir ve tanımlarsanız ancak aşağıdaki gibi başlatmazsanız:
char buf [10];
tüm unsurlarda rastgele içeriğe sahip olacaksınız.