Initializing entire array with memset

前端 未结 4 1126
天涯浪人
天涯浪人 2021-01-19 13:09

I have initialised the entire array with value 1 but the output is showing some garbage value. But this program works correctly if i use 0 or -1 in place of 1. So are there

相关标签:
4条回答
  • 2021-01-19 13:43

    The other answers have explained std::memset already. But it's best to avoid such low level features and program at a higher level. So just use the Standard Library and its C++11 std::array

    #include <array>
    
    std::array<int, 100> a;
    a.fill(1);
    

    Or if you prefer C-style arrays, still use the Standard Library with the std::fill algorithm as indicated by @BoPersson

    #include <algorithm>
    #include <iterator>
    
    int a[100];
    std::fill(std::begin(a), std::end(a), 1);
    

    In most implementations, both versions will call std::memset if it is safe to do so.

    0 讨论(0)
  • 2021-01-19 13:49

    memset is an operation that sets bits.

    If you want to set a value use a for-loop.

    Consider a 4-bit-integer:

    Its value is 1 when the bits are 0001 but memset sets it to 1111

    0 讨论(0)
  • 2021-01-19 13:56

    memset, as the other say, sets every byte of the array at the specified value.

    The reason this works with 0 and -1 is because both use the same repeating pattern on arbitrary sizes:

    (int) -1 is 0xffffffff
    (char) -1 is 0xff
    

    so filling a memory region with 0xff will effectively fill the array with -1.

    However, if you're filling it with 1, you are setting every byte to 0x01; hence, it would be the same as setting every integer to the value 0x01010101, which is very unlikely what you want.

    0 讨论(0)
  • 2021-01-19 14:03

    Memset fills bytes, from cppreference:

    Converts the value ch to unsigned char and copies it into each of the first count characters of the object pointed to by dest.

    Your int takes several bytes, e.g. a 32bit int will be filled with 1,1,1,1 (in base 256, endianess doesn't matter in this case), which you then falsly interpreted as a "garbage" value.

    0 讨论(0)
提交回复
热议问题