Подтвердить что ты не робот

Функция memset на языке c

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Получить?:)

Ответ 3

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

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


Правило большого пальца: Никогда не печатайте [данные].

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