Вот код:
#include <iostream>
#include <cstring>
int main()
{
int win[11];
std::memset(win, 1, sizeof(win));
for (int i = 0; i < 11; ++i)
std::cout << win[i] << ' ';
std::cout << std::endl;
return 0;
}
Я думаю, что здесь нет логического недостатка? Но вместо того, чтобы получить строку из 1
, я получил 16843009
.
Если я изменю memset
на std::memset(win, 0, sizeof(win))
. Тогда все будет как ожидалось. Содержание выигрыша - это все нули.
Я что-то упустил?
Я использую g++ 4.7.3
на Ubuntu 13.04
.
Извините за этот дублированный вопрос.
Вот ответ. благодаря
Почему "memset (arr, -1, sizeof (arr)/sizeof (int))" не очищает целочисленный массив от -1?
int
обычно четыре байта. Но memset
задает значение отдельных байтов, поэтому вы устанавливаете каждое значение в 0x01010101, что примерно так происходит, равное 16843009.
Функция memset
записывает память, не понимая ее структуры. Если вы напишете кучу случайных 1
всему отчету, будет ли отчет показать, что компания потратила $ 1? Я так не думаю. Возможно, он покажет 111111
долларов. Возможно, нет. Кто знает.
Чтобы интеллектуально изменить значение объекта, вы должны понять его структуру. Функция memset
не понимает структуру win
и просто записывает 1
всем байтам. Что это значит, memset
не знает и не заботится.