문제

I have written a small program to get used to memset() operation:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

int main()
{
    int arr[10], i;
    int t = INT_MAX;
    memset(arr, t, sizeof(arr));
    for (i = 0; i < 10; i++)
        printf("%d\t",arr[i]);

    printf("%d",t);
    return 0;
}

The result of the above program is:

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

2147483647

What is the behaviour of the memset() in the above program? Why is it setting the array elements to -1?

도움이 되었습니까?

해결책

memset only takes the lower eight bits of the value and fills the whole buffer with these bits. The lower eight bits of MAX_INT are all ones (0xFF), and thus the array is afterwards filled with all ones. For signed integers, this is -1.

다른 팁

Memset sets the first sizeof(arr) bytes of the block of memory pointed by arr to t interpreted as an unsigned char. So what u get when you read out ints from arr depends in the interpretation of those bytes on your platform.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top