Pemrograman C

Bagaimana Fungsi Memset Digunakan

Bagaimana Fungsi Memset Digunakan

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:

  1. 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.
  2. ch: Ini adalah nilai yang akan disalin ke blok memori. Ini adalah nilai integer, tetapi dikonversi ke karakter yang tidak ditandatangani sebelum disalin.
  3. 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.

Cara Menampilkan Overlay OSD di Aplikasi dan Game Linux Layar Penuh
Memainkan game layar penuh atau menggunakan aplikasi dalam mode layar penuh bebas gangguan dapat memutus Anda dari informasi sistem yang relevan yang ...
5 Kartu Tangkap Game Teratas
Kita semua telah melihat dan menyukai gameplay streaming di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain top yang telah m...
Cara Mengembangkan Game di Linux
Satu dekade yang lalu, tidak banyak pengguna Linux yang memprediksi bahwa sistem operasi favorit mereka suatu hari nanti akan menjadi platform game po...