Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
#1

memset() - C++

11.05.2013, 22:48. Просмотров 1222. Ответов 7
Метки нет (Все метки)

Здравсвуйте. У меня возник вопрос касательно memset().Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <memory.h>
#include <cstdio>
 
using namespace std;
 
long long n,ans=0,thing[101],i,c,cost;
bool flag[101];
 
 
int main()
{
    memset(thing,1001,sizeof (thing));
    memset(flag,0,sizeof (flag));
    scanf("%I64d",&n);
    for(i=0;i<n;++i)
    {
        scanf("%I64d%I64d",&c,&cost);
        cout<<thing[c];
        if(cost < thing[c])
        {
            thing[c]=cost;
            flag[c]=true;
        }
    }
    for(i=1;i<101;++i)
        if(flag[i])
            ans+=thing[i];
    printf("%I64d",ans);
    system("pause");  
}
Почему memset() не заполняет массив thing значением 1001?А вместо этого в массиве появляются другие значения?
Но если заменить
C++
1
memset(thing,1001,sizeof (thing));
на
C++
1
memset(thing,0,sizeof (thing));
то всё работает.

Помогите разобраться с особенностью memset()
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2013, 22:48     memset()
Посмотрите здесь:

memset - C++
Попробовал потренироватся, как работает функция мемсет. Вот попробовал самый простенький код, но не выдаёт результат 7, хотя все поля ...

по поводу memset - C++
здравствуйте, есть, допустим, такой код(rtti включен): struct img { virtual void a() = 0; }; struct img_ : public img { ...

memset, memcpy - C++
Использую MSVS 2008. Почему memcpy работает только с char? То есть, такой код работает: int main() { char a1 = &quot;123&quot;; ...

Неправильное использование memset - C++
сам столкнулся как-то с такой вещью как неправильное использование memset на чистом си... до этого пользовался им только для обнуления, но...

Memset для двухмерного массива - C++
int g_iArray; memset( g_iArray, 0, sizeof( g_iArray) ); Верно ли ?

Запустить программу. Библиотека для memset - C++
Помогите мне, пожалуйста, запустить программу. Текст отсюда...

Порядок хранения структур в ОЗУ и memset - C++
Всем добра! Вопрос в следующем. если объявить массив например m - то он будет храниться в ОЗУ как сплошная последовательность...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,115
11.05.2013, 22:52     memset() #2
memset хоть и принимает int, но внутри себя конвертирует его в unsigned char и именно этим значением заполняет память.
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
11.05.2013, 22:55  [ТС]     memset() #3
NoMasters, то есть memset() может заполнять только значениями от 0 до 255?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 22:57     memset() #4
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
C++
1
memset(thing,1001,sizeof (thing));
Этим значением заполняется каждый байт указанной памяти, а не каждый элемент Вашего массива. Так как 1001 не влезет в 1 байт, то будет переполнение
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,115
11.05.2013, 22:58     memset() #5
ZaMaZaN4iK, вроде того. Смысл в том, что значение задаётся для отдельного байта.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.05.2013, 22:58     memset() #6
Да. Он заполняет значениями от 0 до 255 включительно.
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
11.05.2013, 22:59  [ТС]     memset() #7
Всё, спасибо большое - разобрался!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2013, 23:01     memset()
Еще ссылки по теме:

Что делает memset в приведенном коде - C++
void replace(char* text, char* word) { char* buffer = new char; strcpy(buffer, text); int pos = strstr(buffer, word) - buffer; ...

Функция memset - Assembler
Здравствуйте! Помогите, пожалуйста, с реализацией вызова memset в ассемблере. Я пишу ассемблерную вставку в программу на Си, нужно...

Не найден memset - Visual C++
День добрый во время выполнения кода SCARD_READERSTATEA state; memset(&amp;state,0,sizeof(state)); state.szReader = reader; ...

.NET 3.x Аналог memset() из C++ в C# - C#
Какая функция в C# выполняет то же что и memset() из C++?

работа с memset в masm - Assembler
Всем привет. Пытаюсь написать программу, работающую в режиме ядра - выделяю блок памяти, потом записываю в него некоторое значение с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 23:01     memset() #8
Как пример:
C++
1
2
3
4
5
6
7
8
#include<iostream>
 
int main(){
    int i=10;
    memset(&i,0xFF,sizeof(int));
    std::cout<<i<<std::endl;
    return 0;
}
в результате на экране видим не 255, а -1, т.к. каждый байт был заполнен значением 0xFF, то бишь все биты единичны(включая знаковый). А все единицы - это -1
Yandex
Объявления
11.05.2013, 23:01     memset()
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru