Sunting: OP (atau editor) diam-diam mengubah beberapa tanda kutip tunggal dalam pertanyaan awal menjadi tanda kutip ganda di beberapa titik setelah saya memberikan jawaban ini.
Kode Anda akan menghasilkan kesalahan kompiler. Fragmen kode pertama Anda:
char buf[10] ; buf = ''
adalah ilegal ganda. Pertama, di C, tidak ada yang namanya kosong char
. Anda dapat menggunakan tanda kutip ganda untuk menunjukkan string kosong, seperti:
char* buf = "";
Itu akan memberi Anda penunjuk ke NUL
string, yaitu, string satu karakter dengan hanya NUL
karakter di dalamnya. Tetapi Anda tidak dapat menggunakan tanda kutip tunggal dengan tidak ada isinya - itu tidak ditentukan. Jika Anda perlu menentukan NUL
karakter, Anda harus menentukannya:
char buf = '\0';
Garis miring terbalik diperlukan untuk membedakan karakter '0'
.
char buf = 0;
menyelesaikan hal yang sama, tetapi yang pertama agak kurang ambigu untuk dibaca, saya kira.
Kedua, Anda tidak dapat menginisialisasi array setelah didefinisikan.
char buf[10];
mendeklarasikan dan mendefinisikan array. Pengenal array buf
sekarang menjadi alamat di memori, dan Anda tidak dapat mengubah di mana buf
titik melalui tugas. Begitu
buf = // anything on RHS
ilegal. Fragmen kode kedua dan ketiga Anda ilegal karena alasan ini.
Untuk menginisialisasi sebuah array, Anda harus melakukannya pada saat mendefinisikan:
char buf [10] = ' ';
akan memberi Anda array 10 karakter dengan karakter pertama adalah spasi '\040'
dan karakter lainnya NUL
, yaitu '\0'
. Ketika sebuah array dideklarasikan dan didefinisikan dengan penginisialisasi, elemen array (jika ada) melewati yang dengan nilai awal yang ditentukan secara otomatis diisi 0
. Tidak akan ada "konten acak".
Jika Anda mendeklarasikan dan mendefinisikan array tetapi tidak menginisialisasinya, seperti berikut ini:
char buf [10];
Anda akan memiliki konten acak di semua elemen.