memset устанавливает случайные значения [дубликаты]

0

Вот код:

#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?

Теги:
memset

2 ответа

8
Лучший ответ

int обычно четыре байта. Но memset задает значение отдельных байтов, поэтому вы устанавливаете каждое значение в 0x01010101, что примерно так происходит, равное 16843009.

  • 1
    «Целые числа имеют длину четыре байта» на этой конкретной платформе.
  • 0
    @DyP Да, я думаю, я должен уточнить ...
3

Функция memset записывает память, не понимая ее структуры. Если вы напишете кучу случайных 1 всему отчету, будет ли отчет показать, что компания потратила $ 1? Я так не думаю. Возможно, он покажет 111111 долларов. Возможно, нет. Кто знает.

Чтобы интеллектуально изменить значение объекта, вы должны понять его структуру. Функция memset не понимает структуру win и просто записывает 1 всем байтам. Что это значит, memset не знает и не заботится.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню