C Programlama

Memset İşlevi Nasıl Kullanılır?

Memset İşlevi Nasıl Kullanılır?

C'de memset() işlevi, bir baytlık değeri bir bellek bloğu bayt baytına ayarlamak için kullanılır. Bu işlev, belirli bir değerle bir bellek bloğu baytının bayt bayt başlatılması için kullanışlıdır. Bu yazımızda bu fonksiyonun nasıl kullanılabileceğini detaylı olarak göreceğiz. Öyleyse başlayalım.

Başlık dosyası:

1
dize.h

Sözdizimi:

1
void *memset(void *str, int ch, size_t n)

Bu fonksiyon ilk tarafından gösterilen bellek bloğunun baytları cadde tarafından ch.

Argümanlar:

İşlev 3 bağımsız değişken alır:

  1. cadde: Bu, belleğin ayarlanacağı bellek konumunun işaretçisidir. Bu bir geçersiz işaretçidir, bu nedenle herhangi bir bellek bloğu türünü ayarlayabiliriz, ancak bellek bayt bayt olarak ayarlanacaktır.
  2. ch: Bu, bellek bloğuna kopyalanacak değerdir. Bu bir tamsayı değeridir, ancak kopyalanmadan önce işaretsiz bir karaktere dönüştürülür.
  3. n: Bu, bellek bloğunda ayarlanan bayt sayısıdır.

Dönüş değerleri:

memset() değeri ayarlamaya başladığı bellek bloğunun ilk adresini döndürür.

Örnekler:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Örnek 1.c
#Dahil etmek
#Dahil etmek
int ana()

char str[30] = "ABCD EFGH";
printf("Memset'ten Önce => %s",str);
memset(str,'x',3);
printf("\nMemset'ten sonra => %s\n",str);
0 döndür;


Örnek1'de.c, 30 boyutunda bir karakter dizisi ilan ettik. Ardından “ABCD EFGH” dizesiyle başlattık.” Memset işlevinde str, 'x' ve 3 argümanını geçtik. Böylece, str ile gösterilen bellek bloğu ilk 3 karakteri 'x ile sıfırlayacaktır.' Memset'ten sonra, hafızayı yazdırdığımızda “xxxD EFGH” alacağız.”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Örnek2.c
#Dahil etmek
#Dahil etmek
int ana()

char str[30] = "ABCD EFGH";
printf("Memset'ten Önce => %s",str);
memset(str+4,'x',3);
printf("\nMemset'ten sonra => %s\n",str);
0 döndür;


Örnek2'de.c, str+4'ü memset işlevine geçtik. Böylece, str'nin 4. konumundan sonra hafızayı sıfırlar.  Memset'ten sonra hafızayı yazdırdığımızda “ABCDxxxGH.”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Örnek3.c
#Dahil etmek
#Dahil etmek
int ana()

int dizi[5],i;
memset(dizi,10,5*sizeof(dizi[0]));
printf("\narr Elemanları => \n");
for(i=0;i<5;i++)
printf("%d\t",dizi[i]);
printf("\n");
0 döndür;


Örnek3'te.c, 5 boyutunda bir tamsayı dizisi ilan ettik ve onu 10 ile başlatmaya çalışıyoruz. Ancak çıktıdan dizinin 10 ile başlatılmadığını gördük; bunun yerine “168430090” değerini aldık. Bunun nedeni, tamsayı değerinin bir bayttan büyük olması ve memset işlevinin kopyalanmadan önce değeri işaretsiz bir karaktere dönüştürmesidir. Şimdi 168430090 değerini nasıl alacağımızı göreceğiz.


10'un ikili gösterimi 00000000 00000000 00000000 00001010'dur.

Tamsayı işaretsiz karaktere dönüştürüldüğünde, daha düşük 1 bayt kabul edilir. Bu nedenle, 10 imzasız karaktere dönüştürüldüğünde, ikili gösterim 00001010'dur.

memset() işlevi bellek konumunu bayt bayt ayarlar. Yani toplam 4 bayt olacaktır: 00001010 00001010 00001010 00001010.

4 baytlık ikili gösterimin ondalık değeri 168430090'dır.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Örnek4.c
#Dahil etmek
#Dahil etmek
int ana()

int dizi[5],i;
memset(dizi,0,5*sizeof(dizi[0]));
printf("\narr Elemanları => \n");
for(i=0;i<5;i++)
printf("%d\t",dizi[i]);
printf("\n");
0 döndür;


Örnek4'te.c, tamsayı dizisini 0 ile başlattık. 0'ın ikili gösteriminin tüm bitleri 0'dır. Böylece dizi 0 ile başlatılır.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Örnek5.c
#Dahil etmek
#Dahil etmek
int ana()

int dizi[5],i;
memset(dizi,-1,5*sizeof(dizi[0]));
printf("\narr Elemanları => \n");
for(i=0;i<5;i++)
printf("%d\t",dizi[i]);
printf("\n");
0 döndür;


Örnek5'te.c, tamsayı dizisini 0 ile başlattık. -1'in ikili gösteriminin tüm bitleri 1'dir. Böylece dizi -1 ile başlatılır.

Sonuç:

Bu yazıda, memset fonksiyonunu kullanarak bir bellek bloğunun değerini nasıl verimli bir şekilde başlatabileceğimizi veya ayarlayabileceğimizi gördük. Herhangi bir karakteri ve 0 veya -1'i bir tamsayı değeri olarak bir bellek bloğuna ayarlayabiliriz. Memset işlevi, bir döngü kullanarak konumu basitçe ayarlamakla karşılaştırıldığında, büyük bir bitişik bellek yığını ayarlamak için daha hızlıdır.

How to Install and Play Doom on Linux
Introduction to Doom The Doom Series originated in the 90s after the release of the original Doom. It was an instant hit and from that time onwards th...
Vulkan for Linux Users
With each new generation of graphics cards, we see game developers push the limits of graphical fidelity and come one step closer to photorealism. But...
OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...