Rabu, November 20, 2019

Scanset pada bahasa C

Keluarga fungsi scanf mendukung specifier scanset yang menampilkan hasil dengan %[]. Pada scanset, dapat ditentukan karakter tunggal dari jangkauan kumpulan karakter. Ketika scanset diproses, scanf hanya akan memproses karakter yang menjadi bagian dari scanset. Scanset dapat didefinisikan dengan cara meletakkan karakter di dalam square brackets '[]'. Scanset bersifat case-sensitive.

Perhatikan contoh berikut program berikut ini. Diberikan contoh program dalam bahasa C yang akan menyimpan hanya huruf kapital untuk karakter array 'str', karakter lain yang berbeda tidak akan disimpan pada karakter array tersebut.

Output:
  [root@centos-6 C]# ./scan-set
  Enter a string: GEEKs_for_geeks
  You entered: GEEK

Nilai nilai karakter pertama dari scanset adalah '^', maka specifier akan berhenti membaca program setelah kejadian pertama dari karakter. Contoh, nilai scanset berikut akan membaca semua karakter tetapi akan berhenti setelah karakter 'o' muncul.

scanf("%[^o]s", str);

Perhatikan contoh berikut ini:

Output:
  [root@centos-6 C]# ./scan-set
  Enter a string: http://geeks for geeks
  You entered: http://geeks f
  [root@centos-6 C]#

Implementasikan fungsi gets() dengan menggunakan scanset. Fungsi gets() akan membaca sebuah baris dari stdin menuju titik buffer oleh s sampai akhir baris atau EOF ditemukan.

Output:
  [root@centos-6 C]# ./gets
  Enter a string with spaces: Geeks For Geeks
  You entered: Geeks For Geeks
  [root@centos-6 C]#

Catatan: Perlu diperhatikan bahwa, penggunaa gets() bukan lah suatu yang umum untuk digunakan. Terutama pada Linux.

Jangan menggunakan gets() karena tidak dimungkinkan untuk memberitahukan sesuatu tanpa mengetahui data pada tingkat lebih lanjut mengenai seberapa banyak karakter gets() yang dapat dibaca, dan karena gets() akan terus menerus menyimpan karakter sebelumnya hingga akhir dari buffer, dan hal ini adalah sesuatu kurang aman untuk digunakan. Hal ini dapat memengaruhi keamanan dari komputer yang digunakan. Karena itu ketimbang menggunakan gets(), jauh lebih baik jika menggunakan fgets().





Related Posts

Scanset pada bahasa C
Oleh

mohon untuk melakukan koreksi jika terdapat kesalahan pada penulisan blog ini,