функция memset на языке c - PullRequest
16 голосов
/ 25 июля 2011

Я сейчас изучаю функцию memset, но все примеры касаются массива char следующим образом:

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

это установит каждый элемент в этом массиве char равным 0.

Интересно, может ли memset применяться к массиву int или float?

Ответы [ 3 ]

43 голосов
/ 25 июля 2011

Да, он может применяться к любому буферу памяти, но вы должны ввести правильный размер буфера памяти ... memset обрабатывает любой буфер памяти как последовательность байтов, поэтому будь то char, int, float, double и т. Д. Не имеет большого значения.Имейте в виду, однако, что он не будет устанавливать многобайтовые типы к определенному ненулевому значению ... например:

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

будет не устанавливать каждый элемент aк значению 1 ... скорее он будет устанавливать каждый байт в буфере памяти, занятый a до 1, что означает, что каждый четырехбайтовый int будет установлен в значение 0x01010101, что не совпадает с 0x00000001

1 голос
/ 25 июля 2011

Для массивов статического размера и переменной длины вы можете просто

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


Эмпирическое правило: Никогда не используйте жесткий код [размеры данных].

(Это не работает, если вы передаете массивы в качестве аргументов функции: Поведение Sizeof в C )

1 голос
/ 25 июля 2011

Может применяться к любому массиву.100 в конце - это размер в байтах, так что целое число будет 4 байта каждое, так что это будет -

int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance

Получить?:)

...