Как работает функция 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]);
}
примерно так
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 массивы будут нормально заполнятся
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)
Она преобразует число в байт и соответственно заполняет каждый байт. Поэтому только циклом.
memset работает побайтово