C Програмування

Як використовується функція Memset

Як використовується функція Memset

У C функція memset () використовується для встановлення однобайтового значення блоку пам'яті байт за байтом. Ця функція корисна для ініціалізації блоку пам'яті байт за байтом певним значенням. У цій статті ми детально побачимо, як можна використовувати цю функцію. Отже, давайте почнемо.

Файл заголовка:

1
рядок.h

Синтаксис:

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.c
#включати
#включати
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.c
#включати
#включати
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-го розташування вул.  Після memset, коли ми надрукуємо пам'ять, ми отримаємо “ABCDxxxGH."

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Приклад3.c
#включати
#включати
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.

Коли ціле число перетворюється на знак без знака, враховується нижчий 1 байт. Отже, коли 10 перетворюється на знак без знака, це двійкове представлення - 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.c
#включати
#включати
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.c
#включати
#включати
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 швидше встановлює великий шматок суміжної пам'яті в порівнянні з простим встановленням розташування за допомогою циклу.

Emulate Mouse clicks by hovering using Clickless Mouse in Windows 10
Using a mouse or keyboard in the wrong posture of excessive usage can result in a lot of health issues, including strain, carpal tunnel syndrome, and ...
Add Mouse gestures to Windows 10 using these free tools
In recent years computers and operating systems have greatly evolved. There was a time when users had to use commands to navigate through file manager...
Control & manage mouse movement between multiple monitors in Windows 10
Dual Display Mouse Manager lets you control & configure mouse movement between multiple monitors, by slowing down its movements near the border. Windo...