Panduan Lengkap String dan Array di Bahasa C: Dasar, Fungsi, dan Manajemen Memori

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.

年収訴求