Lagi pula itu praktik yang buruk untuk menginisialisasi array char dengan string literal.
Penulis komentar itu tidak pernah benar-benar membenarkannya, dan saya merasa pernyataan itu membingungkan.
Di C (dan Anda telah menandai ini sebagai C), itu satu-satunya cara untuk menginisialisasi array char
dengan nilai string (inisialisasi berbeda dari penugasan). Anda bisa menulis
char string[] = "october";
atau
char string[8] = "october";
atau
char string[MAX_MONTH_LENGTH] = "october";
Dalam kasus pertama, ukuran array diambil dari ukuran initializer. Literal string disimpan sebagai array char
dengan terminasi 0 byte, sehingga ukuran array adalah 8 ('o', 'c', 't', 'o', 'b', 'e', 'r', 0). Dalam dua kasus kedua, ukuran array ditentukan sebagai bagian dari deklarasi (8 dan MAX_MONTH_LENGTH
, apa pun yang terjadi).
Yang tidak bisa Anda lakukan adalah menulis sesuatu
char string[];
string = "october";
atau
char string[8];
string = "october";
dll Dalam kasus pertama, deklarasi string
ini tidak lengkap karena tidak ada ukuran array telah ditetapkan dan tidak ada initializer untuk mengambil ukuran dari. Dalam kedua kasus, =
tidak akan bekerja karena a) ekspresi array seperti string
mungkin bukan target penugasan dan b) =
operator tidak didefinisikan untuk menyalin konten dari satu array ke array yang lain.
Dengan token yang sama, Anda tidak dapat menulis
char string[] = foo;
di mana foo
array lain dari char
. Bentuk inisialisasi ini hanya akan bekerja dengan string literal.
SUNTING
Saya harus mengubah ini untuk mengatakan bahwa Anda juga dapat menginisialisasi array untuk menahan string dengan penginisialisasi gaya array, seperti
char string[] = {'o', 'c', 't', 'o', 'b', 'e', 'r', 0};
atau
char string[] = {111, 99, 116, 111, 98, 101, 114, 0}; // assumes ASCII
tetapi lebih mudah di mata untuk menggunakan string literal.
EDIT 2
Untuk menetapkan konten array di luar deklarasi, Anda harus menggunakan strcpy/strncpy
(untuk string yang diakhiri 0) atau memcpy
(untuk semua jenis array lainnya):
if (sizeof string > strlen("october"))
strcpy(string, "october");
atau
strncpy(string, "october", sizeof string); // only copies as many characters as will
// fit in the target buffer; 0 terminator
// may not be copied, but the buffer is
// uselessly completely zeroed if the
// string is shorter!