Using memset for integer array in C

前端 未结 10 1729
遇见更好的自我
遇见更好的自我 2020-11-27 02:20
char str[] = \"beautiful earth\";
memset(str, \'*\', 6);
printf(\"%s\", str);

Output:
******ful earth

Like the above use of memset, can we initial

10条回答
  •  误落风尘
    2020-11-27 03:20

    No, you cannot use memset() like this. The manpage says (emphasis mine):

    The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.

    Since an int is usually 4 bytes, this won't cut it.


    If you (incorrectly!!) try to do this:

    int arr[15];
    memset(arr, 1, 6*sizeof(int));    //wrong!
    

    then the first 6 ints in the array will actually be set to 0x01010101 = 16843009.

    The only time it's ever really acceptable to write over a "blob" of data with non-byte datatype(s), is memset(thing, 0, sizeof(thing)); to "zero-out" the whole struture/array. This works because NULL, 0x00000000, 0.0, are all completely zeros.


    The solution is to use a for loop and set it yourself:

    int arr[15];
    int i;
    
    for (i=0; i<6; ++i)    // Set the first 6 elements in the array
        arr[i] = 1;        // to the value 1.
    

提交回复
热议问题