Artikel ini akan menjelaskan perbedaan dan karakteristik dari operator sizeof() dan operator strlen() pada bahasa pemrograman C.
Dalam bahasa pemrograman C, memahami ukuran data dan panjang string adalah aspek penting dalam pengembangan program yang efisien dan aman. Dua fungsi yang sering digunakan untuk tujuan ini adalah strlen dan sizeof. Meski kedua fungsi ini digunakan untuk mengukur sesuatu, keduanya memiliki perbedaan mendasar dalam penggunaannya dan jenis data yang diukur.
sizeof()
Operator sizeof adalah compile time unary operator yang dapat digunakan untuk menghitung ukuran dari nilai operannya. Di sisi lain, sizeof adalah operator yang memberikan ukuran total dari sebuah variabel atau tipe data dalam byte. Tidak seperti strlen, yang khusus untuk string, sizeof dapat digunakan pada berbagai tipe data, termasuk tipe dasar seperti int, float, dan juga struktur kompleks atau array.
Contohnya, jika pengembang memiliki variabel integer, sizeof(int) akan memberikan ukuran dalam byte dari tipe data integer sesuai dengan arsitektur sistem (misalnya, 4 byte pada sistem 32-bit dan 64-bit). Jika digunakan pada array, sizeof akan mengembalikan ukuran total array dalam byte, bukan hanya jumlah elemen dalam array tersebut. Misalnya, sizeof(int[10]) akan mengembalikan 40 pada sistem 32-bit dan 64-bit, karena setiap integer berukuran 4 byte dan terdapat 10 elemen.
Namun, satu hal yang perlu diperhatikan adalah bahwa sizeof ketika diterapkan pada pointer akan mengembalikan ukuran pointer itu sendiri, bukan ukuran data yang ditunjuk. Hal ini penting untuk diperhatikan saat bekerja dengan array dinamis atau alokasi memori dinamis, dimana ukuran sebenarnya dari data harus dihitung secara eksplisit.
Hasil dari sizeof adalah tipe unsigned integral yang biasanya dinotasikan oleh size_t. sizeof dapat diterapkan untuk tipe data apapun, termasuk tipe data primitif seperti integer dan float, atapun tipe data compound seperti struktur, union, dan lain sebagainya.
strlen()
strlen() adalan fungsi predefinisi pada bahasa C yang pendefinisiannya mengandung file header "string.h". Fungsi strlen digunakan untuk mengukur panjang sebuah string dalam bahasa C. String di C adalah array karakter yang diakhiri dengan karakter null (\0). Fungsi ini menghitung jumlah karakter dalam string sampai karakter null tersebut tanpa menyertakan karakter null itu sendiri dalam hitungan.
Misalnya, jika pengembang memiliki string "Hello", maka strlen akan mengembalikan nilai 5, karena terdapat lima karakter dalam string tersebut sebelum karakter null. Fungsi ini sangat berguna dalam pengolahan string, seperti saat ingin mengetahui panjang input pengguna atau mengalokasikan memori yang tepat untuk menyalin string.
Namun, perlu diingat bahwa strlen hanya berfungsi pada string yang benar-benar diakhiri oleh karakter null. Jika array karakter yang diberikan tidak memiliki terminator null, fungsi ini mungkin akan terus menghitung di luar batas array, yang dapat menyebabkan perilaku tak terduga atau bahkan kerusakan memori.
strlen() menerima pointer menuju array sebagai argumen dan melewati memori ketika runtime dari alamat yang diberikan untuk karakter NULL dan menghitung berapa banyak lokasi memori yang dilewatinya sebelum karakter yang dicari tersebut ditemukan. Tugas utama dari strlen() adalah menghitung panjang dari array atau string.
sizeof vs strlen():
- Tipe: operator sizeof adalah operator unary dimana strlen() adalah fungsi predefinisi pada bahasa C.
- Mendukung tipe data: sizeof memberikan nilai real dari tipe data apapun dalam satuan byte tempat dimana nilai ukuran dari array string.
- Evaluasi ukuran: sizeof() adalah ekspresi kombinasi yang memberikan ukuran dari sebuah tipe data atau sebuah variabel. Tidak peduli hal tersebut apakah tentang nilai dari sebuah variabel itu sendiri atau bukan. Sementara strlen, memberikan ukuran panjang dari C-style NULL string.
- Hasil: Keduanya merupakan konsep yang berbeda dan digunakan untuk tujuan yang berbeda pula.
- Dalam kontek bahasa C++: Keduanya tidaklah diperlukan. strlen() dalam string style-C dapat digantikan penggunaannya pada C++ dengan std::strings. sizeof(), dimana pada bahasa C adalah argumen menuju fungsi seperti halnya malloc(), memcpy(), atau memset() yang dapat digantikan penggunaannya pada bahasa C++ dengan use new, std::copy(), dan std::fill(), ataupun dengan menggunakan konstruktur lainnya.
Contoh:
// Program bahasa C untuk
// mendemonstrasikan perbedaan
// antara strlen() dan
// sizeof()
#include<stdio.h>
#include<string.h>
int main()
{
char str[] = "November";
printf("Panjang string adalah"
" %lu\n", strlen(str));
printf("Ukuran string adalah"
" %lu\n", sizeof(str));
}
Output:
Panjang string adalah 8
Ukuran string adalah 9
Karena dalam bahasa C nilai ukuran char adalah 1 byte maka ditemukan pula bahwa strlen() akan memberikan nilai yang lebih kecil daripada sizeof().
Catatan: Diketahui bahwa, setiap string yang diakhiri dengan karakter NULL ("\0").
strlen() selanjutnya akan mencari nilai NULL tersebut dan menghitung angkanya dari memory alamat yang dilewatinya, sehingga akan mendapatkan hasil hitung nilai sebenarnya dari angka yang ditampilkan pada elemen dalam string sebelum berakhir pada nilai NULL. Dengan nilai ukurannya adalah 8.
sizeof(): operator sizeof() akan mengembalikan jumlah nyata dari alokasi memori untuk operand yang telah dilewatinya. Dimana nilai operand array dari karakter adalah mengandung 9 karakter termasuk karakter NULL itu sendiri, dan ukuran dari 1 karakter adalah 1 byte. Sehingga, total dari ukurannya adalah 9 byte.
Contoh: Perkirakan hasil output dari program berikut ini.
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[] = {"nasi padang"};
char b[] = {'n','a','s','i',' ','p','a','d','a','n','g'};
cout << "sizeof(a) = " << sizeof(a);
cout << "\nstrlen(a) = "<< strlen(a);
cout<< "\nsizeof(b) = " << sizeof(b);
cout<< "\nstrlen(b) = " << strlen(b);
return 0;
}
Output:
sizeof(a) = 12
strlen(a) = 11
sizeof(b) = 11
strlen(b) = 22
Catatan: Fungsi strlen mencari karakter NULL dan berperilaku tidak normal jika tidak menemukan karakter NULL tersebut.
Kesimpulan
Baik strlen maupun sizeof memiliki peran penting dalam pengembangan program di C. strlen digunakan untuk mengukur panjang string, yang membantu dalam berbagai operasi string. Sementara itu, sizeof digunakan untuk menentukan ukuran memori yang dibutuhkan oleh berbagai tipe data, yang sangat penting dalam alokasi memori dan penanganan struktur data. Memahami perbedaan dan penggunaan yang tepat dari kedua fungsi ini adalah kunci untuk menulis kode C yang efisien dan bebas dari kesalahan.
Referensi Tambahan:
Artikel ini didedikasikan kepada: Shefina Putri Saqina, Syafira Nanda Anggraeni, Yosita Cecilia, Zidan Alfian Bahtiar, dan Achmad Syaefuddin.
Apa yang dimaksud dengan strlen pada bahasa pemrograman C?
BalasHapusFungsi strlen() pada bahasa C adalah digunakan untuk menghitung panjang nilai string.
HapusCatatan: strlen() menghitung panjang string hingga batas tertentu, tetapi tidak termasuk nilai karakter NULL pada bagian akhir dengan nilai return akan mengembalikan panjang string yang diteruskan kepada fungsi tersebut sebelumnya.
Apa fungsi library standar C terhadap strlen()?
BalasHapusUntuk penggunaan fungsi strlen, maka pada bahasa C harus disertakan library standar C dengan menggunakan header . Setelah library string C tersebut disertakan, maka program dapat melakukan pemanggilan fungsi strlen secara langsung pada program tersebut.
HapusSangat bagus penjelasannya, terima kasih jadi lebih bisa memahai perbedaan antara strlen() dan sizeof() pada bahasa C.
BalasHapus