Penjelasan Lengkap Array char di C: Dasar hingga Aplikasi

1. Pendahuluan

Bahasa C adalah bahasa yang masih banyak digunakan di bidang pengembangan sistem dan pengembangan sistem tertanam. Di antaranya, “array char” adalah salah satu elemen sintaksis paling dasar dan penting untuk menangani string.

Bahasa C tidak memiliki tipe string standar. Sebagai gantinya, array karakter (char array) digunakan untuk merepresentasikan string. Hal ini tidak terlalu intuitif bagi pemula, sehingga pemahaman array char sering menjadi hambatan besar dalam belajar bahasa C.

Selain itu, jika tidak memahami perbedaan penggunaan antara array char dan pointer char(char*) serta keberadaan karakter null(\0) secara detail, dapat menyebabkan bug yang tidak terduga.

Artikel ini fokus pada tema 「Array Char Bahasa C」, menjelaskan secara jelas mulai dari penggunaan dasar, teknik lanjutan, hingga cara menghindari kesalahan umum.

Bagi yang ingin mulai belajar bahasa C secara serius atau yang ingin mengulang kembali tentang array char, silakan baca sampai akhir. Pada bab berikutnya, pertama-tama akan dijelaskan definisi array char dan mekanisme dasarnya.

2. Apa itu array char?

Dalam bahasa C, “char array” adalah karakter (tipe char) yang dikumpulkan menjadi satu array. Ini merupakan struktur dasar dalam penanganan string.

Apa itu tipe char?

Dalam bahasa C, char adalah tipe data untuk merepresentasikan satu karakter. Misalnya, dapat mendefinisikan variabel satu karakter seperti berikut.

char c = 'A';

Dengan cara ini, satu karakter yang dikelilingi oleh 'A' seperti single quote didefinisikan sebagai tipe char.

Sintaks Dasar Array Char

Untuk menyimpan beberapa karakter, gunakan array tipe char. Definisikan seperti berikut:

char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Array ini menyediakan ruang memori untuk 6 karakter, yaitu string 5 karakter "Hello" ditambah karakter null (\0).

Pentingnya Karakter Null ('

Ukuran Array dan Poin Perhatian

'
)

Dalam bahasa C, untuk menandai akhir string digunakan karakter null '\0'. Tanpa simbol ini, fungsi-fungsi manipulasi string tidak akan berfungsi dengan benar dan dapat menyebabkan perilaku tak terduga.

char str[] = "Hello"; // secara otomatis menambahkan '\0' di akhir

Seperti di atas, dengan menggunakan literal string yang diapit oleh double quote, kompiler secara otomatis menambahkan '\0' di akhir.

年収訴求

3. Deklarasi dan Inisialisasi Array char

Saat menggunakan array char, dasarannya adalah memastikan ukuran sebesar jumlah karakter yang diperlukan + 1 (untuk karakter null). Jika menempatkan string ke dalam array yang terlalu kecil, dapat menyebabkan buffer overflow dan program dapat berakhir secara tidak normal.

Deklarasi dan Inisialisasi Statis

Untuk menggunakan array char, pertama-tama diperlukan deklarasi dan inisialisasi yang tepat. Di sini, kami menjelaskan mulai dari cara deklarasi dasar array char dalam bahasa C, cara inisialisasi, hingga penggunaan memori dinamis.

Inisialisasi dengan Literal String

Sebagai metode paling dasar, ada cara untuk mendeklarasikan dengan menyebutkan ukuran array secara eksplisit dan menginisialisasinya satu karakter per satu.

char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Dengan cara ini, str dapat diperlakukan sebagai string "Hello". Yang penting adalah selalu menyertakan '\0' di akhir.

Menetapkan Ukuran dan Menetapkan Literal

Dalam bahasa C, inisialisasi sederhana menggunakan literal string seperti berikut juga memungkinkan.

char str[] = "Hello";

Dalam kasus ini, ukuran array secara otomatis menjadi 6 karakter, yaitu "Hello" + '\0'. Jika ingin mengubah isi string, dengan mendeklarasikannya sebagai array char, perubahan dapat dilakukan dengan aman.

Penggunaan Alokasi Memori Dinamis (malloc)

Meskipun memungkinkan untuk menginisialisasi dengan literal string sambil menentukan ukuran array, perhatikan kekurangan ukuran.

char str[5] = "Hello"; // ❌ Penyebab kesalahan (ukuran tidak mencukupi)

Seperti di atas, "Hello" membutuhkan total 6 karakter, yaitu 5 karakter + 1 karakter (‘\0’). Oleh karena itu, setidaknya harus menggunakan char str[6].

4. Operasi String

Jika ingin menangani string dengan lebih fleksibel, ada cara untuk mengalokasikan array char secara dinamis menggunakan malloc.

#include 
#include 

char* str = malloc(6 * sizeof(char));
strcpy(str, "Hello");

Dengan metode ini, memori dialokasikan secara dinamis, dan string ditangani melalui pointer tersebut. Setelah penggunaan, tidak dapat menggunakan free(str); untuk membebaskan memori.

Menyalin string: strcpy

Dalam bahasa C, penggunaan fungsi pustaka standar untuk operasi string dengan array char adalah hal yang umum. Di sini, kami menjelaskan fungsi-fungsi dasar operasi string dan cara menggunakannya, beserta contoh konkret.

Menggabungkan string: strcat

strcpy adalah fungsi yang menyalin satu string ke array char lain.

#include 

char src[] = "Hello";
char dest[10];
strcpy(dest, src);

Catatan: Jika dest tidak memiliki ukuran yang cukup, dapat menyebabkan buffer overflow. Pastikan ukuran setidaknya panjang string yang disalin ditambah 1 (karakter null).

Mendapatkan panjang string: strlen

strcat menggabungkan dua string. Isi argumen kedua ditambahkan ke akhir argumen pertama.

#include 

char str1[20] = "Hello";
char str2[] = " World";
strcat(str1, str2);

Hasilnya, str1 menjadi "Hello World". Juga, harus dipastikan bahwa array argumen pertama memiliki ruang yang cukup untuk menampung ukuran total setelah penggabungan.

Membandingkan string: strcmp

strlen mengembalikan panjang string (jumlah karakter tanpa karakter null).

#include 

char str[] = "Hello";
int len = strlen(str); // len = 5

Karena karakter null tidak dihitung, orang yang tidak terbiasa dengan bahasa C harus berhati-hati.

Mencari dalam string: strchr dan strstr

Untuk membandingkan apakah dua string sama, gunakan strcmp.

#include 

char str1[] = "Hello";
char str2[] = "World";

if (strcmp(str1, str2) == 0) {
    // Sama
} else {
    // Berbeda
}

Fungsi ini mengembalikan 0 jika sama, dan selisih kode karakter jika berbeda.

5. Perbedaan antara array char dan pointer

Untuk mencari karakter tertentu atau substring, dapat menggunakan fungsi-fungsi berikut.

#include 

char str[] = "Hello World";

// Pencarian karakter
char *ptr1 = strchr(str, 'o'); // Pointer ke 'o' pertama

// Pencarian substring
char *ptr2 = strstr(str, "World"); // Pointer ke posisi awal "World"

Jika tidak ditemukan, kedua fungsi tersebut mengembalikan NULL.

Perbedaan deklarasi

Dalam bahasa C, ketika menangani string, char array dan char pointer (char*) tampak mirip, tetapi sebenarnya memiliki sifat yang berbeda. Memahami perbedaan ini dengan benar dapat mencegah penggunaan memori yang salah dan bug yang tidak terduga.

Perbedaan kemampuan menulis ulang

Pertama, mari kita lihat perbedaan cara deklarasi.

char str1[] = "Hello";  // char array
char *str2 = "Hello";   // char pointer

str1 adalah array yang memiliki wujud nyata dan 6 byte (“Hello” + ‘\\0’) dialokasikan di memori. Di sisi lain, str2 adalah pointer ke wilayah memori yang menyimpan literal string.

Perbedaan struktur memori

char array str1 dapat mengubah karakter di dalam array secara bebas.

str1[0] = 'h'; // OK

Namun, ketika char* str2 = "Hello"; seperti mengakses literal string dengan pointer, mengubah isinya merupakan perilaku tak terdefinisi.

str2[0] = 'h'; // ❌ perilaku tak terdefinisi (kemungkinan error saat runtime)

Perbedaan dalam memperoleh ukuran

  • array karakterdi stack
  • pointer karakterarea konstan (hanya baca)area heap (seperti malloc)perlu berhati-hati dalam menangani memori

Ringkasan: Poin-poin penggunaan

Untuk array, sizeof(str1) mengembalikan jumlah total byte dari array.

char str1[] = "Hello";
printf("%lu", sizeof(str1)); // → 6 (termasuk '\\0')

Di sisi lain, untuk pointer, sizeof(str2) mengembalikan ukuran pointer itu sendiri (biasanya 4-8 byte), sehingga tidak dapat digunakan untuk tujuan memperoleh ukuran array.

char *str2 = "Hello";
printf("%lu", sizeof(str2)); // → 8 (lingkungan 64-bit)

 

6. Cara Mengirim Array char ke Fungsi

Itemarray karakterpointer char
Perubahan kontenmungkinSecara prinsip tidak boleh (jika literal)
Dapatkan ukuransizeof()strlen()
Tujuan penulisan ulangcocokTidak cocok (hanya baca)
fleksibilitasUkuran TetapFleksibel, namun perlu hati-hati

Contoh Dasar: Mengirim Array char sebagai Argumen

Dalam bahasa C, ketika mengirim array ke fungsi, tidak menggunakan “pass by value” melainkan “pass by pointer”. Ini juga berlaku untuk array char , sehingga yang dikirim ke fungsi adalah alamat awal (pointer) array.

Memahami mekanisme ini sangat penting dalam situasi di mana Anda memanipulasi string antar fungsi atau mengubah isinya.

Fungsi yang Mengubah Isi

#include 

void printString(char str[]) {
    printf("String: %s\n", str);
}

int main() {
    char greeting[] = "Hello";
    printString(greeting);
    return 0;
}

Dalam contoh ini, fungsi printString menerima argumen bertipe char[] , tetapi sebenarnya diterima sebagai char* . Artinya, char str[] sama dengan char *str .

Manajemen Ukuran Array

Bahkan ketika mengubah isi array di dalam fungsi, Anda dapat memanipulasi data secara langsung melalui alamat yang diteruskan.

#include 

void toUpperCase(char str[]) {
    for (int i = 0; str[i] != ' '; i++) {
        if ('a' <= str[i] && str[i] <= 'z') {
            str[i] = str[i] - ('a' - 'A');
        }
    }
}

int main() {
    char text[] = "hello world";
    toUpperCase(text);
    printf("%s\n", text); // Output: HELLO WORLD
    return 0;
}

Dengan cara ini, meskipun Anda ingin mengubah isi array, karena diperlakukan sebagai pointer, operasi dalam fungsi akan tercermin pada pemanggil .

Argumen Read-Only dengan const

Dalam bahasa C, ketika mengirim array ke fungsi, informasi ukuran tidak dikirim bersama . Karena itu, praktik terbaik adalah mengirim ukuran sebagai argumen juga untuk operasi yang aman.

void printChars(char str[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%c ", str[i]);
    }
    printf("\n");
}

Selain itu, menggunakan fungsi strlen untuk memperoleh panjang string secara dinamis juga umum. Namun, berhati-hatilah untuk tidak menggunakannya pada array yang tidak diakhiri null.

7. Contoh Praktis: Menampilkan String dalam Urutan Terbalik

Jika string tidak diubah dalam fungsi, sebaiknya gunakan const char* untuk menandakan bahwa argumen bersifat read‑only.

void printConstString(const char *str) {
    printf("%s\n", str);
}

Ini membantu mencegah perubahan yang tidak diinginkan dan juga menyampaikan spesifikasi fungsi dengan jelas.

Tujuan

Di sini, mari kita gunakan pengetahuan tentang array char yang telah dipelajari sejauh ini untuk membuat program yang menampilkan string secara terbalik secara nyata.

Kode Contoh

Mencetak string yang dimasukkan pengguna satu karakter demi satu karakter dari akhir ke awal. Ini sangat berguna sebagai latihan manipulasi array, memperoleh panjang string, dan proses loop.

Penjelasan

#include 
#include 

void printReversed(char str[]) {
    int len = strlen(str);
    for (int i = len - 1; i >= 0; i--) {
        putchar(str[i]);
    }
    putchar('\n');
}

int main() {
    char text[100];

    printf("Masukkan string: ");
    fgets(text, sizeof(text), stdin);

    // Menghapus karakter baris baru (langkah pencegahan saat menggunakan fgets)
    size_t len = strlen(text);
    if (len > 0 && text[len - 1] == '\n') {
        text[len - 1] = '\0';
    }

    printf("Jika ditampilkan terbalik: ");
    printReversed(text);

    return 0;
}

Contoh Eksekusi

  • fgets
  • yang ditambahkan di akhir input (karakter baris baru) juga tidak lupa melakukan proses menghapus。
  • strlen()

Tips Penerapan

Masukkan string:OpenAI
Jika ditampilkan terbalik:IAnepO

8. Kesalahan Umum dan Cara Menanganinya

Proses ini dapat diterapkan untuk penentuan palindrome string atau pemahaman struktur stack dan lain-lain dalam belajar algoritma. Selain itu, dapat diubah menggunakan operasi pointer, sehingga menjadi materi latihan yang lebih maju.

1. Lupa menambahkan null terminator(

2. Kekurangan ukuran buffer

Saat menangani array char dalam bahasa C, terdapat beberapa jebakan yang mudah terperangkap baik bagi pemula maupun ahli. Di sini, kami akan menjelaskan secara konkret kesalahan yang sering muncul serta langkah pencegahan dan solusinya.

3. Menulis ulang literal string

Salah satu kesalahan yang paling umum adalah lupa menambahkan karakter null (\0) di akhir string.

char str[5] = {'H', 'e', 'l', 'l', 'o'}; // ❌ Tidak ada '\0' di akhir
printf("%s\n", str); // Perilaku tidak terdefinisi

Cara mengatasi:

char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; // ✅ Benar

Atau, dengan menggunakan literal string, karakter null akan ditambahkan secara otomatis.

4. Lupa memproses karakter newline pada fgets

strcpy dan strcat seperti fungsi, ukuran array tujuan penyalinan tidak cukup dan menyebabkan kerusakan memori (buffer overflow).

char str1[5];
strcpy(str1, "Hello"); // ❌ Menyalin 6 karakter ke array berukuran 5

Cara mengatasi:

  • di tujuan salinan lakukan (misalnya: 「jumlah karakter + 1」)
  • Pertimbangkan juga penggunaan yang lebih aman.
char str1[6];
strncpy(str1, "Hello", sizeof(str1) - 1);
str1[5] = '\0'; // Secara hati-hati menambahkan karakter null di akhir

5. Kebingungan antara pointer dan array

char *str = "Hello"; yang dideklarasikan seperti itu, mungkin menunjuk ke wilayah yang tidak dapat ditulis . Menulis ke sana akan menyebabkan kesalahan waktu jalan.

char *str = "Hello";
str[0] = 'h'; // ❌ Segmentation fault saat runtime

Cara mengatasi:

char str[] = "Hello"; // ✅ Dideklarasikan sebagai array yang dapat diubah
str[0] = 'h';

9. Ringkasan

fgets digunakan untuk mendapatkan string, perlu diingat bahwa karakter newline ( \n ) dapat tertinggal di akhir.

fgets(str, sizeof(str), stdin);
// str akan berisi sesuatu seperti "Hello\n\0"

Cara mengatasi:

size_t len = strlen(str);
if (len > 0 && str[len - 1] == '\n') {
    str[len - 1] = '\0';
}

Hal yang dipelajari dalam artikel ini

Karena tampakannya mirip, char* dan char[] dapat tercampur, yang dapat menyebabkan perilaku tidak terdefinisi. Perbedaan dalam memperoleh ukuran (sizeof) serta perbedaan apakah dapat diubah atau tidak perlu disadari.

Saran untuk pembelajaran selanjutnya

Dalam artikel ini, kami telah menjelaskan secara bertahap tentang “array char dalam bahasa C” mulai dari dasar hingga aplikasi. Pada akhir, kami akan meninjau kembali isi artikel dan memperkenalkan panduan belajar ke depan.

Hal yang dipelajari dalam artikel ini

  • Peran dan cara deklarasi array char Dalam bahasa C, karena tidak ada tipe string, untuk menangani string kita menggunakan array tipe char.
  • Kepentingan literal string dan karakter null(\0 Untuk merepresentasikan string, karakter null di akhir sangat penting.
  • Pengoperasian string menggunakan fungsi pustaka standar , , , jika menggunakan seperti itu, dapat memproses string secara efisien.
  • Perbedaan antara array char dan pointer char Array dan pointer mirip namun tidak sama, terdapat perbedaan jelas dalam struktur memori dan kemampuan penulisan ulang.
  • Cara Mengirim Array ke Fungsi dan Pertimbangan Keamanan Array sebenarnya dikirim sebagai pointer, jadi perlu berhati-hati dalam penulisan ulang dan pengelolaan ukuran.
  • Pembentukan pemahaman melalui contoh praktis dan kesalahan umum Melalui penerapan kode nyata dan cara menangani kesalahan, kami belajar cara penggunaan yang lebih realistis.

Saran untuk pembelajaran selanjutnya

Memahami cara menggunakan array char adalah langkah pertama untuk memahami dasar operasi memori dalam bahasa C. Pengetahuan yang dipelajari di sini dapat diterapkan pada langkah selanjutnya seperti berikut.

  • Pointer arithmetic
  • Manajemen Memori Dinamismallocfree
  • Kombinasi dengan struktur

Selain itu, dengan membaca kode yang ditulis orang lain, Anda dapat menyerap sudut pandang dan cara penulisan yang belum Anda miliki. Kebiasaan membaca proyek nyata atau OSS (perangkat lunak sumber terbuka) juga sangat efektif.

Bahasa C memberikan kebebasan tinggi, sehingga jika tidak ditangani dengan benar dapat berbahaya, namun dengan membangun dasar secara teliti menjadi senjata yang sangat kuat. Pemahaman array char adalah langkah pertama itu. Silakan gunakan artikel ini sebagai referensi dan tingkatkan keterampilan Anda secara konsisten.

侍エンジニア塾