Artikel Terbaru

Cara Mudah Menggunakan Atribut OnDradEnd pada Elemen HTML

Atribut event ondragend merupakan salah satu atribut pada html yang akan bekerja ketika user telah selesai melakukan drag pada elemen html. Fitur drag and drop merupakan fitur yang umum pada html5. Setiap elemen pada html dapat dilakukan drag dengan menggunakan atribut draggable pada html5.

Fakta Unik Risiko Penggunaan gets() pada Bahasa C

Pada artikel ini akan dijelaskab beberapa risiko yang dapat muncul jika menggunakan fungsi gets() pada program bahasa C. Perhatikan program berikut:

void read()

{

char str[20];

gets(str);

printf("%s", str);

return;

}


Kode program tersebut memang terlihat sederhana, dimana kode program tersebut akan membaca standard input dan mencetak nilai string yang telah dimasukkan, tetapi akan mengalami buffer overflow gets() karena tidak melakukan pengujian array terikat, dimana gets() akan terus membaca sampai perintah tersebut melihat karakter baris baru.

Untuk menghindari buffer overflow tersebut, maka digunakan fgets() ketimbang gets() untuk memastikan bahwa karakter yang dibaca tidak lebih dari MAX_LIMIT.

#define MAX_LIMIT 20

 

void read()

{

char str[MAX_LIMIT];

fgets(str, MAX_LIMIT, stdin);

printf("%s", str);

getchar();

return;

}


Catatan: fgets() akan menyimpan karakter '\n' jika dibaca, sehingga untuk menghapusnya harus dilakukan secara eksplisit oleh programmer. Oleh karena itu, secara umum disarankan bahwa str setidaknya menyimpan sebanyak MAX_LIMIT+1 jumlah karakter jika tidak ingin menyimpan karakter baris baru. Hal ini dilakukan agar ada cukup ruang untuk karakter akhiran nol '\0' yang akan ditambahkan pada bagian akhir string.

Jika menjaga karakter baris baru tidak menjadi tujuan, maka dapat dilakukan dengan membuat instruksi berikut:

int len = strlen(str);
// Remove the '\n' character and replace it with '\0'
str[len - 1] = '\0';

Komentar

  1. Apa alternatif yang dapat digunakan sebalin menggunakan fungsi gets() pada bahasa C?

    BalasHapus
    Balasan
    1. Fungsi alternatif selain menggunakan fungsi gets() adalah dengan menggunakan fgets() atau getline().

      Hapus
    2. Fungsi fgets() dapat digunakan sebagai pengganti dari fungsi gets() pada bahasa C guna menyelesaikan permasalahan yang terdapat pada fungsi gets(), dimana fgets() akan membaca seluruh baris hingga karakter '\n' ditemukan.

      Hapus
    3. fgets() didukung oleh sebagian besar implementasi C seperti gcc, unix, kompilator Borland, dan lain sebagainya.

      Hapus
  2. Kenapa penggunaan fungi gets() pada bahasa C dapat berbahaya bagi program?

    BalasHapus
    Balasan
    1. Penggunaan fungsi gets() dapat berbahaya bagi program karena fungsi tersebut dapat mengarah pada buffer overflow atau kesalahan a.k.a error.

      Hapus

Posting Komentar

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung. :D

Catatan: setiap iklan yang ditayangkan pada blog ini bersumber dari google adsense. Dengan jenis iklan yang dipilih adalah, sebagai berikut.

POIN 1, Iklan yang ditampilkan hanya boleh berbahasa indonesia atau berbahasa inggris. Tidak menerima jenis iklan dalam bahasa yang lain selain yang telah disebutkan karena blog ini dibuat untuk para pengunjung dari negara atau orang yang berbahasa Indonesia.

POIN 2, Setiap gambar yang ditampilkan pada iklan sifatnya tidak mengganggu para pengunjung yang melihat blog, atau tidak boleh menampilkan gambar yang bersifat menjijikkan atau merangsang rasa mual.

POIN 3, Jenis iklan yang dipasang bukan merupakan iklan spam, atau berisi dan mengarahkan pengunjung ke alamat yang berbahaya atau bersifat penipuan.

POIN 4, Segala bentuk iklan tunduk dan patuh pada ketentuan dari pihak Adsense google dan pemilik blog.

POIN 5, Segala jenis iklan yang tidak bertentangan dengan poin 1-4 yang dijelaskan sebelumnya, maka iklan tersebut dapat ditampilkan pada blog.

POIN 6, Jika ada pihak ketika yang ingin memasang iklan pada blog ini secara langsung, maka dapat menghubungi pemilik blog melalui kontak 0882 3218 8316.



~ Ikatlah Ilmu dengan Memostingkannya ~

Hot Artikel

Enkapsulasi pada Java

Perbedaan stdio.h dan stdlib.h pada Bahasa C

Perbedaan Antara int main() dan int main(void) pada Bahasa C

2 Jenis Utama Kegiatan Penelitian Berdasarkan Waktunya, Crosssectional Salah Satunya

Cara Tepat Penulisan void main dan main pada Bahasa C