Dapatkah semua string dianggap sebagai array karakter ( Ya ), dapatkah semua array karakter dianggap string ( Tidak ).
Kenapa tidak? dan mengapa itu penting?
Selain jawaban lain yang menjelaskan bahwa panjang string tidak disimpan di mana pun sebagai bagian dari string dan referensi ke standar di mana string didefinisikan, sisi lain adalah "Bagaimana fungsi C library menangani string?"
Sementara array karakter dapat menampung karakter yang sama, itu hanya array karakter kecuali karakter terakhir diikuti oleh karakter nul-terminating . Itu nul-mengakhiri karakter adalah apa yang memungkinkan array karakter dipertimbangkan (ditangani sebagai) string.
Semua fungsi dalam C yang mengharapkan string sebagai argumen mengharapkan urutan karakter akan diakhiri . Mengapa?
Ini ada hubungannya dengan cara semua fungsi string bekerja. Karena panjang tidak dimasukkan sebagai bagian dari array, fungsi string, pindai maju dalam array sampai karakter-nul (misalnya '\0'
- setara dengan desimal 0
) ditemukan. Lihat Tabel dan Deskripsi ASCII . Terlepas apakah Anda menggunakan strcpy
, strchr
, strcspn
, dll .. Semua fungsi string bergantung pada nul-terminating karakter yang hadir untuk menentukan di mana akhir string yang.
Perbandingan dua fungsi serupa dari string.h
akan menekankan pentingnya karakter nul-terminating . Ambil contoh:
char *strcpy(char *dest, const char *src);
The strcpy
Fungsi hanya salinan byte dari src
ke dest
sampai nul-terminating karakter ditemukan jitu strcpy
di mana harus berhenti menyalin karakter. Sekarang ambil fungsi yang sama memcpy
:
void *memcpy(void *dest, const void *src, size_t n);
Fungsi melakukan operasi serupa, tetapi tidak mempertimbangkan atau memerlukan src
parameter untuk menjadi string. Karena memcpy
tidak dapat hanya memindai ke depan dalam src
menyalin byte dest
hingga karakter nul-terminating tercapai, itu memerlukan jumlah byte eksplisit untuk menyalin sebagai parameter ketiga. Parameter ketiga ini memberikan memcpy
informasi ukuran yang sama strcpy
yang dapat diturunkan hanya dengan memindai ke depan sampai karakter nul-terminating ditemukan.
(yang juga menekankan apa yang salah strcpy
(atau fungsi apa pun yang mengharapkan string) jika Anda gagal menyediakan fungsi dengan string nul-dihentikan - ia tidak tahu di mana harus berhenti dan dengan senang hati akan berlomba melintasi seluruh segmen memori Anda menerapkan Perilaku Undefined sampai nul-karakter kebetulan ditemukan di suatu tempat di memori - atau Segmentation Fault terjadi)
Itulah sebabnya fungsi yang mengharapkan string nul-dihentikan harus melewati string nul-dihentikan dan mengapa itu penting .
char str[] = "hello";
kopernya.