1. Pendahuluan
Bahasa C masih digunakan secara luas dalam bidang pemrograman sistem dan pemrograman embedded. Dalam bahasa ini, string dan array merupakan elemen penting untuk mengelola data. Saat mempelajari bahasa C, memahami spesifikasi unik di mana string diperlakukan sebagai “array karakter” adalah hal yang tidak dapat dihindari.
Artikel ini akan membahas secara mendalam konsep dasar string dan array dalam bahasa C, dengan tujuan menjawab pertanyaan umum dari pemula hingga tingkat menengah mengenai “perbedaan dan keterkaitan antara string dan array”.
Selain itu, melalui contoh program nyata, kita juga akan membahas cara deklarasi array dan string, fungsi dasar untuk manipulasi string, serta poin-poin penting dalam manajemen memori. Dengan begitu, Anda akan dapat melakukan operasi string di bahasa C secara lebih aman dan efisien.
2. Dasar-Dasar Array
Pemahaman tentang array dalam bahasa C menjadi dasar dari operasi string. Bagian ini akan menjelaskan konsep dan cara penggunaan array.
Apa itu Array?
Array adalah struktur yang menyimpan data dengan tipe yang sama dalam blok memori yang berurutan. Misalnya, dengan mendeklarasikan array bertipe int
, kita dapat menyimpan beberapa nilai integer sekaligus. Di bahasa C, array dideklarasikan seperti berikut:
int numbers[5]; // array untuk menyimpan 5 nilai integer
Kode ini mendeklarasikan array bertipe integer bernama numbers
dan mengalokasikan memori untuk menyimpan 5 nilai integer. Untuk mengakses setiap elemen, gunakan indeks.
Deklarasi dan Inisialisasi Array
Selain deklarasi, kita juga dapat melakukan inisialisasi array secara langsung, yaitu menetapkan nilai awal saat deklarasi.
int numbers[5] = {1, 2, 3, 4, 5}; // deklarasi dan inisialisasi array
Dalam contoh ini, array numbers
berisi nilai 1 hingga 5 secara berurutan. Jika inisialisasi diabaikan, isi array akan bersifat tidak terdefinisi (garbage data dari memori).
Penempatan Memori dan Akses Array
Array dalam bahasa C disimpan secara berurutan di memori. Misalnya, deklarasi int numbers[5]
akan menempatkan elemen numbers[0]
hingga numbers[4]
pada lokasi memori yang bersebelahan.
Indeks array dimulai dari 0 dan berlaku hingga ukuran array dikurangi satu.
printf("%d", numbers[0]); // menampilkan elemen pertama array
Dengan array, kita dapat mengelola dan memanipulasi data dengan tipe yang sama secara efisien menggunakan satu variabel saja.
3. Dasar-Dasar String
Dalam bahasa C, string bukan hanya sekadar urutan karakter, tetapi diperlakukan sebagai array khusus. Bagian ini akan membahas elemen penyusun string di bahasa C dan cara operasinya.
Apa itu String?
Dalam bahasa C, string direpresentasikan sebagai array karakter yang diakhiri dengan karakter null ('\0'
). Karakter null ini menandai akhir string dan sangat penting dalam operasi string.
Contohnya, string dapat didefinisikan seperti berikut:
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
Di sini, array greeting
berisi kata “Hello” diikuti karakter null '\0'
. Dalam bahasa C, akhir string diidentifikasi dengan karakter null ini.
Deklarasi dan Inisialisasi String
String dapat diinisialisasi langsung menggunakan literal string:
char greeting[] = "Hello";
Dengan cara ini, kompiler akan otomatis menambahkan karakter null di akhir string, sehingga ukuran array menjadi 6 (5 karakter + karakter null). Mengabaikan karakter null dapat menyebabkan hasil yang salah.
Perbedaan String Literal dan Array Karakter
String literal bertipe const char*
dan isinya tidak dapat diubah:
const char *greeting = "Hello"; // string literal
Sementara array karakter dapat dimodifikasi:
char greeting[] = "Hello";
greeting[0] = 'h'; // mengubah "Hello" menjadi "hello"
Memahami perbedaan ini membantu menghindari kesalahan dalam manajemen memori.
4. Hubungan antara String dan Array
Dalam bahasa C, string diimplementasikan sebagai “array karakter”. Bagian ini menjelaskan arti dari fakta tersebut, serta cara deklarasi dan inisialisasi string.
String adalah Array Karakter
Untuk mengelola string, bahasa C menggunakan array karakter. Misalnya, kita dapat mendeklarasikan array bertipe char
untuk menyimpan string:
char name[10] = "Alice";
Kode ini menyimpan string “Alice” dalam array name
. Bahasa C secara otomatis menambahkan karakter null ('\0'
) di akhir string, sehingga isi array sebenarnya adalah:
{'A', 'l', 'i', 'c', 'e', '\0', '\0', '\0', '\0', '\0'}
Karakter null ini menandai akhir string, sementara sisa elemen diisi dengan karakter null tambahan.
Cara Deklarasi String dan Hal yang Perlu Diperhatikan
Ukuran array harus cukup besar untuk menampung seluruh string beserta karakter null. Jika terlalu kecil, akan menyebabkan error atau perilaku yang tidak diinginkan:
char name[3] = "Alice"; // menyebabkan error
“Alice” memerlukan 6 byte (5 karakter + karakter null), sedangkan array di atas hanya menyediakan 3 byte.
Penugasan dan Manipulasi String
Bahasa C tidak mendukung penugasan langsung ke seluruh array, sehingga perubahan string dilakukan per karakter:
name[0] = 'B'; // Mengubah "Alice" menjadi "Blice"
Untuk menyalin seluruh string, gunakan fungsi pustaka seperti strcpy
:
strcpy(name, "Bob"); // menyalin "Bob" ke dalam name
5. Fungsi Dasar Manipulasi String
Bahasa C menyediakan banyak fungsi dalam pustaka standar untuk manipulasi string, seperti penyalinan, penggabungan, pengukuran panjang, dan perbandingan.
Fungsi Penyalinan strcpy
strcpy
menyalin isi satu string ke string lain:
#include <string.h>
char source[] = "Hello";
char destination[10];
strcpy(destination, source); // menyalin source ke destination
Pastikan ukuran destination
cukup besar untuk menampung string yang disalin.
Fungsi Penggabungan strcat
strcat
menggabungkan dua string dengan menambahkan string kedua di akhir string pertama:
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // menghasilkan "Hello World"
Pastikan ukuran array pertama cukup untuk menampung hasil gabungan.
Mengukur Panjang String dengan strlen
strlen
menghitung jumlah karakter dalam string tanpa menghitung karakter null:
#include <string.h>
char greeting[] = "Hello";
int length = strlen(greeting); // length bernilai 5
Membandingkan String dengan strcmp
strcmp
membandingkan dua string dan mengembalikan 0 jika sama, atau nilai positif/negatif jika berbeda:
#include <string.h>
char str1[] = "Hello";
char str2[] = "Hello";
char str3[] = "World";
int result1 = strcmp(str1, str2); // 0 (sama)
int result2 = strcmp(str1, str3); // bukan 0 (berbeda)
6. Array String (Array 2 Dimensi)
Untuk menyimpan beberapa string sekaligus, kita dapat menggunakan array 2 dimensi:
char names[3][10] = {
"Alice",
"Bob",
"Carol"
};
Setiap baris array dapat menyimpan hingga 9 karakter + karakter null.
Mengakses Array 2 Dimensi
char first_char = names[0][0]; // 'A' dari "Alice"
for (int i = 0; i < 3; i++) {
printf("%s\n", names[i]);
}
Menginisialisasi dan Perhatian Ukuran
char colors[3][10] = {"Red", "Green", "Blue"};
Pastikan ukuran kolom cukup untuk menampung string terpanjang.
Contoh Operasi pada Array 2 Dimensi
#include <stdio.h>
#include <string.h>
int main() {
char names[3][10] = {"Bob", "Alice", "Carol"};
char temp[10];
for (int i = 0; i < 2; i++) {
for (int j = i + 1; j < 3; j++) {
if (strcmp(names[i], names[j]) > 0) {
strcpy(temp, names[i]);
strcpy(names[i], names[j]);
strcpy(names[j], temp);
}
}
}
for (int i = 0; i < 3; i++) {
printf("%s\n", names[i]);
}
return 0;
}
7. Manajemen Memori dan Hal yang Perlu Diperhatikan
Apa itu Buffer Overflow?
Buffer overflow terjadi saat data ditulis melebihi kapasitas array:
char buffer[10];
strcpy(buffer, "This is a very long string"); // buffer overflow
Menggunakan strncpy
untuk Operasi Aman
char buffer[10];
strncpy(buffer, "This is a very long string", sizeof(buffer) - 1);
buffer[sizeof(buffer) - 1] = '\0';
Menggunakan Alokasi Memori Dinamis
#include <stdlib.h>
#include <string.h>
char *str = (char *)malloc(20 * sizeof(char));
strcpy(str, "Dynamic allocation");
free(str);
Mencegah Memory Leak
char *name = (char *)malloc(50 * sizeof(char));
strcpy(name, "John Doe");
free(name);
8. Kesimpulan
Artikel ini membahas mulai dari dasar string dan array di bahasa C, fungsi standar untuk manipulasi string, penggunaan array 2 dimensi, hingga manajemen memori.
Pemahaman Dasar Array dan String
String adalah array karakter yang diakhiri karakter null '\0'
.
Fungsi Dasar String
Gunakan strcpy
, strcat
, strlen
, strcmp
sesuai kebutuhan dengan memperhatikan keamanan memori.
Pengelolaan Beberapa String
Array 2 dimensi memudahkan pengelolaan banyak string dalam satu variabel.
Manajemen Memori
Hindari buffer overflow dan memory leak dengan teknik seperti strncpy
dan malloc/free
.
Penutup
Dengan memahami konsep dan fungsi yang tepat, operasi string di bahasa C dapat dilakukan dengan aman dan efisien.