10 Fungsi Library string.h Bahasa C yang Sering Dipakai

Laptop menampilkan kode C dengan fungsi string.h dan catatan tulisan tangan di meja kayu

Fungsi library string.h bahasa C adalah kumpulan rutin siap pakai untuk menyalin, membandingkan, mencari, dan memecah teks. Kalau kamu sudah bisa membaca input dengan scanf atau fgets, langkah berikutnya adalah mengolah teks itu, dan di sinilah string.h menghemat banyak baris kode. Sepuluh fungsi di bawah ini yang paling sering muncul saat orang menulis C.

1. strcpy untuk menyalin string

strcpy(tujuan, sumber) menyalin isi string sumber ke tujuan, termasuk karakter penutup . Array tujuan harus cukup besar. Kalau tidak, penulisan melewati batas memori dan program bisa berperilaku aneh atau crash tanpa pesan jelas.

char nama[20];
strcpy(nama, "Budi");
printf("%sn", nama);

Untuk tujuan yang ukurannya tidak pasti, pakai strncpy dan pastikan sendiri karakter terakhirnya . strncpy tidak selalu menambahkan penutup kalau sumber lebih panjang dari batas.

2. strlen untuk menghitung panjang

strlen menghitung jumlah karakter sampai pertama, tanpa menghitung penutup itu. Hasilnya bertipe size_t, bilangan bulat tanpa tanda. Saat membandingkan dengan angka negatif, ubah dulu tipenya supaya perbandingan tidak meleset.

char kata[] = "kompilasi";
printf("%zun", strlen(kata)); // 9

Fungsi ini membaca seluruh isi string setiap kali dipanggil. Kalau dipakai di dalam loop yang panjang, simpan hasilnya di variabel dulu.

3. strcmp dan strncmp untuk membandingkan

Jangan bandingkan string dengan operator ==. Operator itu membandingkan alamat, bukan isi. Gunakan strcmp yang mengembalikan 0 kalau kedua string sama, nilai negatif kalau string pertama lebih kecil, dan positif kalau lebih besar.

if (strcmp(jawaban, "ya") == 0) {
    puts("Lanjut");
}

strncmp membatasi perbandingan pada n karakter pertama. Berguna saat kamu hanya ingin mencocokkan awalan perintah.

4. strcat untuk menyambung string

strcat(tujuan, sumber) menambahkan isi sumber ke ujung tujuan. Sama seperti strcpy, kapasitas array tujuan harus muat menampung gabungan keduanya plus satu karakter penutup. Untuk keamanan, gunakan strncat dengan sisa ruang yang tersedia.

char sapaan[30] = "Halo, ";
strcat(sapaan, "dunia");
puts(sapaan); // Halo, dunia

5. strchr dan strrchr untuk mencari karakter

strchr mengembalikan pointer ke kemunculan pertama sebuah karakter, atau NULL kalau tidak ada. strrchr mencari dari belakang. Pola ini sering dipakai untuk memisahkan nama file dari ekstensinya.

char *titik = strrchr("laporan.txt", '.');
if (titik != NULL) printf("Ekstensi: %sn", titik + 1);

Karena hasilnya pointer ke dalam string asli, kamu bisa mengubah isinya lewat pointer itu. Ini nyambung dengan cara kerja pointer yang dibahas di panduan alamat memori pada pointer.

6. strstr untuk mencari substring

strstr mencari potongan teks di dalam string yang lebih panjang dan mengembalikan pointer ke awal kemunculannya. Semua pencarian kata sederhana bisa dibangun dari fungsi ini.

if (strstr(baris, "error") != NULL) {
    puts("Baris ini berisi error");
}

7. strtok untuk memecah teks

strtok memecah string berdasarkan sekumpulan karakter pemisah. Pemanggilan pertama memakai string asli, pemanggilan berikutnya memakai NULL.

char data[] = "apel,jeruk,mangga";
char *bagian = strtok(data, ",");
while (bagian != NULL) {
    puts(bagian);
    bagian = strtok(NULL, ",");
}

Fungsi ini mengubah string aslinya dengan menyisipkan di posisi pemisah. Jangan memberinya string literal atau data yang masih kamu butuhkan utuh. strtok juga menyimpan status internal, jadi tidak aman dipakai bersamaan di dua loop berbeda.

8. memset untuk mengisi blok memori

memset(ptr, nilai, jumlah) mengisi sejumlah byte dengan nilai tertentu. Sering dipakai untuk membersihkan buffer sebelum diisi ulang.

char buffer[100];
memset(buffer, 0, sizeof(buffer));

Hati-hati, memset bekerja per byte. Mengisinya dengan angka 1 pada array int tidak menghasilkan nilai 1, melainkan pola byte yang berbeda.

9. memcpy untuk menyalin blok data

memcpy menyalin sejumlah byte dari satu lokasi ke lokasi lain. Berbeda dari strcpy, fungsi ini tidak peduli pada sehingga cocok untuk array angka atau struct.

int asal[3] = {1, 2, 3};
int salinan[3];
memcpy(salinan, asal, sizeof(asal));

Kalau area sumber dan tujuan bertumpuk, pakai memmove yang menangani tumpang tindih dengan benar.

10. strspn dan strcspn untuk mengukur awalan

strspn menghitung berapa karakter di awal string yang termasuk dalam himpunan tertentu. strcspn kebalikannya, menghitung sampai karakter pertama yang cocok dengan himpunan. Trik klasiknya: membuang karakter newline sisa fgets.

char baris[100];
fgets(baris, sizeof(baris), stdin);
baris[strcspn(baris, "n")] = '';

Pola ini lebih aman daripada strlen dengan pengurangan manual, karena tidak bermasalah kalau newline memang tidak ada.

Kebiasaan yang membuat pemakaian string.h lebih aman

  • Selalu hitung kapasitas array sebelum menyalin atau menyambung.
  • Periksa hasil fungsi pencarian terhadap NULL sebelum memakainya.
  • Pakai varian berbatas (strncpy, strncat, strncmp) saat ukuran sumber tidak kamu kendalikan.
  • Ingat bahwa banyak fungsi mengubah string asli, jadi salin dulu kalau data masih dibutuhkan.

Saat kode mulai berurusan dengan banyak teks dari file atau input pengguna, kemampuan mengolah string ini jadi bekal penting. Kalau kamu juga tertarik membangun aplikasi web, memahami cara data dipetakan ke alamat seperti pada tips memahami routing di Ruby on Rails bisa memberi gambaran bagaimana prinsip pemetaan yang mirip bekerja di lapisan lain. Untuk tampilan aplikasi yang kamu buat nanti, perbandingan gaya visual antarmuka aplikasi membantu memilih arah desain yang sesuai.

Ringkasan

Sepuluh fungsi di atas menutup sebagian besar kebutuhan manipulasi teks harian: menyalin, menghitung, membandingkan, mencari, memecah, dan membersihkan buffer. Disiplin soal ukuran array dan pengecekan nilai balik menentukan apakah kode aman. Kalau kamu ingin memperdalam cara menyimpan data teks dalam struktur, lihat juga perbandingan struct dan union serta panduan file I/O untuk membaca teks dari berkas.

Pertanyaan yang Sering Diajukan

Apa perbedaan strcpy dan memcpy?

strcpy berhenti saat menemukan , sedangkan memcpy menyalin sejumlah byte yang kamu tentukan tanpa peduli isinya. Pakai strcpy untuk teks, dan memcpy untuk data biner atau array.

Kenapa strcmp mengembalikan 0 saat string sama?

Nilai 0 menandakan tidak ada selisih antara kedua string. Fungsi ini mengembalikan selisih karakter pertama yang berbeda, jadi hasilnya bisa negatif atau positif tergantung urutan leksikografis.

Apakah strtok aman dipakai di program multi-thread?

Tidak. strtok menyimpan posisi terakhir di variabel internal yang dipakai bersama. Di lingkungan multi-thread, gunakan strtok_r yang menerima penyimpan status sendiri.