C Програмиране

Как се използва функцията Memset

Как се използва функцията Memset

В C функцията memset () се използва за задаване на еднобайтова стойност на блок от памет на байт по байт. Тази функция е полезна за инициализиране на байт по памет на байт от определена стойност. В тази статия ще видим подробно как може да се използва тази функция. И така, нека започнем.

Заглавен файл:

1
низ.з

Синтаксис:

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

Тази функция задава първата н байта на блока памет, посочен от ул от гл.

Аргументи:

Функцията отнема 3 аргумента:

  1. ул: Това е указателят на мястото на паметта, където ще бъде зададена паметта. Това е празен указател, така че можем да зададем всякакъв тип блок памет, но паметта ще се задава байт по байт.
  2. гл: Това е стойността, която трябва да се копира в блока памет. Това е целочислена стойност, но тя се преобразува в неподписан знак преди копиране.
  3. н: Това е броят на байтовете в блока памет, който е зададен.

Върнати стойности:

memset () връща първия адрес на блока памет, откъдето започва да задава стойността.

Примери:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Пример1.° С
#include
#include
int main ()

char str [30] = "ABCD EFGH";
printf ("Преди memset =>% s", str);
memset (str, 'x', 3);
printf ("\ nСлед memset =>% s \ n", str);
връщане 0;


В Пример1.c, декларирахме един символен масив с размер 30. След това сме го инициализирали с низа „ABCD EFGH.”Във функцията memset сме предали 3 аргумента str, 'x' и 3. Така че блокът памет, посочен от str, ще нулира първите 3 знака с 'x.'След memset, когато отпечатаме паметта, ще получим „xxxD EFGH.”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Пример2.° С
#include
#include
int main ()

char str [30] = "ABCD EFGH";
printf ("Преди memset =>% s", str);
memset (str + 4, 'x', 3);
printf ("\ nСлед memset =>% s \ n", str);
връщане 0;


В Пример2.c, предадохме str + 4 на функцията memset. И така, той нулира паметта след 4-то местоположение на str.  След memset, когато отпечатаме паметта, ще получим “ABCDxxxGH.”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Пример3.° С
#include
#include
int main ()

int arr [5], i;
memset (arr, 10,5 * sizeof (arr [0]));
printf ("\ narr Елементи => \ n");
за (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
връщане 0;


В Пример3.c, декларирахме целочислен масив с размер 5 и се опитваме да го инициализираме с 10. Но от изхода видяхме, че масивът не се инициализира с 10; вместо това имаме стойността “168430090”. Това е така, защото целочислената стойност е по-голяма от един байт и функцията memset преобразува стойността в неподписан знак преди да бъде копирана. Сега ще видим как ще получим стойността “168430090”.


Двоичното представяне на 10 е 00000000 00000000 00000000 00001010.

Когато цяло число се преобразува в неподписан char, се взема предвид по-ниският 1 байт. Така че, когато 10 се преобразува в неподписан char, това е двоично представяне е 00001010.

Функцията memset () задава байт по местоположение на паметта. И така, общо 4 байта ще бъдат: 00001010 00001010 00001010 00001010.

Десетичната стойност на двоичното представяне на 4 байта е 168430090.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Пример4.° С
#include
#include
int main ()

int arr [5], i;
memset (arr, 0,5 * sizeof (arr [0]));
printf ("\ narr Елементи => \ n");
за (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
връщане 0;


В Пример4.c, инициализирахме целочисления масив с 0. Всички битове от двоичното представяне на 0 е 0. Така че масивът се инициализира с 0.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Пример5.° С
#include
#include
int main ()

int arr [5], i;
memset (arr, -1,5 * sizeof (arr [0]));
printf ("\ narr Елементи => \ n");
за (i = 0; i<5;i++)
printf ("% d \ t", arr [i]);
printf ("\ n");
връщане 0;


В Пример5.c, инициализирахме целочисления масив с 0. Всички битове от двоичното представяне на -1 е 1. Така че масивът се инициализира от -1.

Заключение:

В тази статия видяхме с помощта на функцията memset как можем ефективно да инициализираме или зададем стойността на блок памет. Можем да зададем всеки знак и 0 или -1 като целочислена стойност на блок памет. Функцията Memset е по-бърза за задаване на голяма част от непрекъсната памет в сравнение с простото задаване на местоположението с помощта на цикъл.

Как да промените левия и десния бутон на мишката на компютър с Windows 10
Напълно нормално е всички устройства на компютърни мишки да са ергономично проектирани за десничари. Но има налични устройства за мишка, които са спец...
Емулирайте кликванията на мишката, като задържите курсора на мишката с кликаща мишка в Windows 10
Използването на мишка или клавиатура в неправилна поза при прекомерна употреба може да доведе до много здравословни проблеми, включително напрежение, ...
Добавете жестове на мишката към Windows 10, като използвате тези безплатни инструменти
През последните години компютрите и операционните системи значително се развиха. Имаше време, когато потребителите трябваше да използват команди за на...