Ada beberapa cara untuk membuat array string di C. Jika semua string akan memiliki panjang yang sama (atau setidaknya memiliki panjang maksimum yang sama), Anda cukup mendeklarasikan array char 2-d dan menetapkan yang diperlukan:
char strs[NUMBER_OF_STRINGS][STRING_LENGTH+1];
...
strcpy(strs[0], aString); // where aString is either an array or pointer to char
strcpy(strs[1], "foo");
Anda dapat menambahkan daftar inisialisasi juga:
char strs[NUMBER_OF_STRINGS][STRING_LENGTH+1] = {"foo", "bar", "bletch", ...};
Ini mengasumsikan ukuran dan jumlah string dalam initializer cocok dengan dimensi array Anda. Dalam hal ini, isi setiap string literal (yang merupakan array char yang diakhiri nol) disalin ke memori yang dialokasikan untuk strs. Masalah dengan pendekatan ini adalah kemungkinan fragmentasi internal; jika Anda memiliki 99 string yang terdiri dari 5 karakter atau kurang, tetapi 1 string yang panjangnya 20 karakter, 99 string akan memiliki setidaknya 15 karakter yang tidak digunakan; itu buang-buang ruang.
Alih-alih menggunakan array char 2-d, Anda dapat menyimpan array pointer 1-d untuk char:
char *strs[NUMBER_OF_STRINGS];
Perhatikan bahwa dalam hal ini, Anda hanya mengalokasikan memori untuk menahan pointer ke string; memori untuk string itu sendiri harus dialokasikan di tempat lain (baik sebagai array statis atau dengan menggunakan malloc()
atau calloc()
). Anda dapat menggunakan daftar penginisialisasi seperti contoh sebelumnya:
char *strs[NUMBER_OF_STRINGS] = {"foo", "bar", "bletch", ...};
Alih-alih menyalin isi konstanta string, Anda hanya menyimpan pointer ke mereka. Perhatikan bahwa konstanta string mungkin tidak dapat ditulis; Anda dapat menetapkan ulang pointer, seperti:
strs[i] = "bar";
strs[i] = "foo";
Tetapi Anda mungkin tidak dapat mengubah konten string; yaitu,
strs[i] = "bar";
strcpy(strs[i], "foo");
mungkin tidak diizinkan.
Anda dapat menggunakan malloc()
untuk mengalokasikan buffer secara dinamis untuk setiap string dan menyalin ke buffer itu:
strs[i] = malloc(strlen("foo") + 1);
strcpy(strs[i], "foo");
BTW,
char (*a[2])[14];
Mendeklarasikan sebagai array 2 elemen pointer ke array 14 elemen char.
char (*a[2])[14]
adalah array dari dua pointer ke array dari 14 karakter.