Sesuai dengan judulnya, pertanyaan saya adalah bagaimana cara mendapatkan ukuran sebuah string di C
. Apakah baik menggunakan sizeof
jika saya mendeklarasikannya (string) dalam sebuah fungsi tanpa malloc
di dalamnya? Atau, jika saya mendeklarasikannya sebagai pointer? Bagaimana jika saya menginisialisasikannya dengan malloc
? Saya ingin mendapatkan jawaban yang lengkap.
Anda dapat menggunakan strlen. Ukuran ditentukan oleh karakter null yang mengakhiri, sehingga string yang dilewatkan harus valid.
Jika Anda ingin mendapatkan ukuran buffer memori, yang berisi string Anda, dan Anda memiliki pointer ke sana:
sizeof
untuk mendapatkan ukurannya.Jika Anda bingung tentang perbedaan antara larik dinamis dan statis, periksa this.
Gunakan strlen
untuk mendapatkan panjang null-terminated string.
sizeof
mengembalikan panjang larik bukan string. Jika itu adalah pointer (char *s
), bukan array (char s[]
), itu tidak akan bekerja, karena akan mengembalikan ukuran pointer (biasanya 4 byte pada sistem 32-bit). Saya percaya sebuah larik akan dioper atau dikembalikan sebagai pointer, sehingga Anda akan kehilangan kemampuan untuk menggunakan sizeof
untuk memeriksa ukuran larik.
Jadi, hanya jika string mencakup seluruh larik (misalnya char s[] = "stuff"
), akan menggunakan sizeof
untuk larik yang didefinisikan secara statis mengembalikan apa yang Anda inginkan (dan lebih cepat karena tidak perlu mengulang-ulang untuk menemukan null-terminator) (jika karakter terakhir adalah null-terminator, Anda harus mengurangi 1). Jika tidak menjangkau seluruh larik, maka tidak akan mengembalikan apa yang Anda inginkan.
Alternatif untuk semua ini sebenarnya adalah menyimpan ukuran string.
Sementara sizeof
bekerja untuk jenis string tertentu:
char str[] = "content";
int charcount = sizeof str - 1; // -1 to exclude terminating '\0'
Ini tidak bekerja jika str
adalah pointer (sizeof
mengembalikan ukuran pointer, biasanya 4 atau 8) atau larik dengan panjang yang ditentukan (sizeof
akan mengembalikan hitungan byte yang cocok dengan panjang yang ditentukan, yang untuk tipe char adalah sama).
Cukup gunakan strlen()
.