Dalam C, fungsi memset() digunakan untuk menetapkan nilai satu byte ke blok memori byte demi byte. Fungsi ini berguna untuk inisialisasi blok memori byte demi byte dengan nilai tertentu. Pada artikel ini, kita akan melihat secara detail bagaimana fungsi ini dapat digunakan. Jadi, mari kita mulai.
Berkas Tajuk:
1 | tali.h |
Sintaksis:
1 | void *memset(void *str, int ch, size_t n) |
Fungsi ini menetapkan yang pertama tidak byte dari blok memori yang ditunjuk oleh str oleh ch.
Argumen:
Fungsi membutuhkan 3 argumen:
- str: Ini adalah penunjuk lokasi memori tempat memori akan disetel. Ini adalah pointer kosong, jadi kita dapat mengatur semua jenis blok memori, tetapi memori akan diatur byte demi byte.
- ch: Ini adalah nilai yang akan disalin ke blok memori. Ini adalah nilai integer, tetapi dikonversi ke karakter yang tidak ditandatangani sebelum disalin.
- tidak: Ini adalah jumlah byte di blok memori yang disetel.
Nilai kembali:
memset() mengembalikan alamat pertama dari blok memori dari mana ia mulai mengatur nilainya.
Contoh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //Contoh 1.c #termasuk #termasuk int utama() char str[30] = "ABCD EFGH"; printf("Sebelum memset => %s",str); memset(str,'x',3); printf("\nSetelah memset => %s\n",str); kembali 0; |
Dalam Contoh1.c, kami telah mendeklarasikan satu array karakter berukuran 30. Kemudian kita menginisialisasinya dengan string “ABCD EFGH.” Pada fungsi memset, kita telah melewati 3 argumen str, 'x' dan 3. Jadi, blok memori yang ditunjuk oleh str akan direset 3 karakter pertama dengan 'x.' Setelah memset, ketika kita mencetak memori, kita akan mendapatkan “xxxD EFGH.”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //Contoh2.c #termasuk #termasuk int utama() char str[30] = "ABCD EFGH"; printf("Sebelum memset => %s",str); memset(str+4,'x',3); printf("\nSetelah memset => %s\n",str); kembali 0; |
Dalam Contoh2.c, kami telah melewati str+4 ke fungsi memset. Jadi, itu mengatur ulang memori setelah lokasi ke-4 str. Setelah memset, saat kita mencetak memori, kita akan mendapatkan “ABCDxxxGH.”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Contoh3.c #termasuk #termasuk int utama() int arr[5],i; memset(arr,10,5*sizeof(arr[0])); printf("\narr Elemen => \n"); untuk(i=0;i<5;i++) printf("%d\t",arr[i]); printf("\n"); kembali 0; |
Dalam Contoh3.c, kami telah mendeklarasikan array bilangan bulat ukuran 5 dan mencoba menginisialisasinya dengan 10. Tetapi dari output, kita telah melihat bahwa array tidak diinisialisasi oleh 10; sebagai gantinya, kami mendapat nilai "168430090". Ini karena nilai integer lebih besar dari satu byte dan fungsi memset mengubah nilai menjadi karakter yang tidak ditandatangani sebelum disalin. Sekarang, kita akan melihat bagaimana kita akan mendapatkan nilai "168430090".
Representasi biner dari 10 adalah 00000000 00000000 00000000 00001010.
Ketika integer dikonversi ke unsigned char, 1 byte yang lebih rendah dianggap. Jadi, ketika 10 diubah menjadi unsigned char, representasi binernya adalah 00001010.
fungsi memset() mengatur lokasi memori byte demi byte. Jadi, total 4 byte akan menjadi: 00001010 00001010 00001010 00001010.
Nilai desimal dari representasi biner 4 byte adalah 168430090.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Contoh4.c #termasuk #termasuk int utama() int arr[5],i; memset(arr,0,5*ukuran(arr[0])); printf("\narr Elemen => \n"); untuk(i=0;i<5;i++) printf("%d\t",arr[i]); printf("\n"); kembali 0; |
Dalam Contoh4.c, kami telah menginisialisasi array integer dengan 0. Semua bit representasi biner dari 0 adalah 0. Jadi array diinisialisasi oleh 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Contoh5.c #termasuk #termasuk int utama() int arr[5],i; memset(arr,-1,5*sizeof(arr[0])); printf("\narr Elemen => \n"); untuk(i=0;i<5;i++) printf("%d\t",arr[i]); printf("\n"); kembali 0; |
Dalam Contoh5.c, kami telah menginisialisasi array integer dengan 0. Semua bit representasi biner dari -1 adalah 1. Jadi array diinisialisasi oleh -1.
Kesimpulan:
Dalam artikel ini, kita telah melihat menggunakan fungsi memset bagaimana kita dapat menginisialisasi atau mengatur nilai blok memori secara efisien. Kita dapat mengatur karakter apa saja dan 0 atau -1 sebagai nilai integer ke blok memori. Fungsi memset lebih cepat untuk mengatur sebagian besar memori yang berdekatan dibandingkan dengan hanya mengatur lokasi menggunakan loop.