Top.Mail.Ru
Ответы

Как работает функция memset() c массивами типа int?

Я пытаюсь заполнить массив определённым числом через эту функцию, и распечатывается непонятно что.
Вот код
int arr[8]={-1,2,3,-4,10,12,14,20};
memset(arr,20,8*sizeof(int));
int i;
for(i=0; i<8; i++){
printf("%d ",arr[i]);
}

По дате
По рейтингу
Аватар пользователя
Просветленный
8лет

примерно так

void mymemset(void* dest, int val, size_t size ){
unsigned char* D = (unsigned char*)dest;
for( size_t i( 0 ); i < size; ++i ) D[ i ]=(unsigned char)val;
}

но нужно указывать только 0, так как значение будет передаваться каждому байту

ведь, массив int = 4 байта

0x00 00 00 00

и каждому байту будет присвоено указанное значение. 20 = 14 в hex

значит будет не так

0x00000014

а так

0x14141414 = 336860180

char массивы будут нормально заполнятся

Аватар пользователя
8лет

void * memset ( void * ptr, int value, size_t num );

Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char)

Она преобразует число в байт и соответственно заполняет каждый байт. Поэтому только циклом.

Аватар пользователя
Ученик
8лет

memset работает побайтово