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 NUL
dizgeye bir işaretçi verecektir , yani sadece içinde NUL
karakter 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 NUL
karakteri, 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ı buf
artı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.