funkcja memset w języku c

Studiuję teraz funkcję memset, ale wszystkie przykłady dotyczą tablicy znaków w następujący sposób:

char a[100];
memset(a, 0, 100);

Ustawia każdy element w tej tablicy znaków na 0.

Zastanawiałem się, czy memset może aplikować do int array lub float array?

Author: Jason, 2011-07-25

3 answers

Tak, może mieć zastosowanie do dowolnego bufora pamięci, ale musisz wprowadzić prawidłowy rozmiar bufora pamięci ... memset traktuje dowolny bufor pamięci jako serię bajtów, więc czy jest char, int, float, double, itp., nie ma znaczenia. Należy jednak pamiętać, że nie ustawia typów wielobajtowych na określoną wartość niezerową ... na przykład:

int a[100];
memset(a, 1, sizeof(a));

Nie Ustaw każdy element a na wartość 1 ... zamiast tego ustawia każdy bajt w buforze pamięci zajmowanym przez a to 1, co oznacza, że każdy czterobajtowy int będzie ustawiony na wartość 0x01010101, która nie jest taka sama jak 0x00000001

 42
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-25 13:01:26

Dla tablic o rozmiarach statycznych i zmiennej długości, możesz po prostu

<arbitrary-type>  foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes


reguła: nigdy hardcode [rozmiary danych].

(to nie działa, jeśli przekazujesz tablice jako argumenty funkcji: zachowanie Sizeof w C )

 1
Author: Sebastian Mach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:57

Może być zastosowana do dowolnej tablicy. 100 na końcu jest wielkością w bajtach, więc liczba całkowita wynosi 4 bajty każda, więc będzie to -

int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance
Rozumiesz? :)
 1
Author: John Humphreys - w00te,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-25 13:32:35