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

bool + int + char в одну переменную - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
bigxman
0 / 0 / 0
Регистрация: 01.09.2009
Сообщений: 10
09.03.2011, 14:03     bool + int + char в одну переменную #1
Подскаждите кто может, как три разных значения, к примеру : "ВАСЯ", 123, false закинуть

в область памяти, на которую указывает указатель. Я делал так:

void * p = malloc (sizeof(int)+sizeof(bool)+sizeof(char));

(int*)p=123;
p=p+4;
(char*)p="Vasya";
p=p+1;
(bool*)p=true;


Но это, все неработате, может кто-то подскажет как, и какие ошибки?
За ранее благодарен за ответ!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
09.03.2011, 14:17     bool + int + char в одну переменную #2
Создайте структуру "бомжик"

C++
1
2
3
4
5
6
struct outcast
{
   char* name;
   int age;
   bool money;
}Vasya;
Имя - Вася, возраст - 123, деньги - йок.
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
09.03.2011, 17:28     bool + int + char в одну переменную #3
bigxman, union посмотри
sizeof(char) размер одного символа, а не строки к тому же
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
09.03.2011, 17:31     bool + int + char в одну переменную #4
Цитата Сообщение от IrineK Посмотреть сообщение
Создайте структуру "бомжик"
Не совсем канает, ибо требуется ещё одна область памяти для хранения строкового значения

Цитата Сообщение от KuKu Посмотреть сообщение
bigxman, union посмотри
Ему надо хранить все три значения одновременно, а не по очереди
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
09.03.2011, 17:39     bool + int + char в одну переменную #5
C++
1
2
3
4
5
6
 
char[] b="aaa";    
void* a=malloc(sizeof(int)+sizeof(bool)+strlen(b)*sizeof(char));
*((int*)a)=4;
*((bool*)(int(a)+sizeof(int)))=true;
*((char*)(int(a)+sizeof(int)+sizeof(bool)))=b;
может так, но не уверен )
IrineK
Заблокирован
09.03.2011, 17:42     bool + int + char в одну переменную #6
Тогда жестко:
C++
1
2
3
4
5
6
struct outcast
{
   char name [20];
   int age;
   bool money;
}Vasya;
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
09.03.2011, 17:49     bool + int + char в одну переменную #7
Цитата Сообщение от KuKu Посмотреть сообщение
может так, но не уверен )
Идея понятна, но есть три ошибки:
1. strlen не учитывает хвостовой ноль.
2. Преобразование указателя к int'у - есть плохой способ программирования
3. Строку ты не скопировал, а в память поместил лишь указатель на неё

Добавлено через 1 минуту
Цитата Сообщение от IrineK Посмотреть сообщение
Тогда жестко
В частных случах такое решение сойдёт (когда ты наверняка знаешь, что есть ограничение на размер строки).

Вы пока подумайте, а потом скину одно очень хитрож..ое решение, которое тем не менее является стандартной практикой и видел во многих gnu'тых программах
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
09.03.2011, 17:51     bool + int + char в одну переменную #8
Первое это да ... промашка вышла вышла, третье через strcopy можно(или как там копировать). А вот по второму пункту как иначе ?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
09.03.2011, 17:54     bool + int + char в одну переменную #9
Цитата Сообщение от KuKu Посмотреть сообщение
А вот по второму пункту как иначе ?
Преобразовывать надо к char*, а не к int'у
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
09.03.2011, 18:16     bool + int + char в одну переменную #10
Цитата Сообщение от Evg Посмотреть сообщение
Преобразовывать надо к char*, а не к int'у
А какая разница ? указатель к число преобразовывать некрасиво или инт может быть не по размеру к указателю или в другом?

C++
1
2
3
4
5
    char b[] = "aaa";
    void* a=malloc(sizeof(int)+sizeof(bool)+strlen(b)*sizeof(char));
    *((int*)a)=4;
    *((bool*)((char*)(a)+sizeof(int)))=true;
    strcpy((char*)((char*)(a)+sizeof(int)+sizeof(bool)), b);
вродь так
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
09.03.2011, 18:36     bool + int + char в одну переменную #11
Цитата Сообщение от KuKu Посмотреть сообщение
инт может быть не по размеру к указателю
Оно самое. И он обычно не равен при компиляции 64-битного и 16-битного кода.
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
09.03.2011, 18:46     bool + int + char в одну переменную #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
union U
{
    int i;
    char c[5];
    bool b;
};
///////////////////////////////////////////////////////////
int main()
{
    U un;
    un.i=98;
    cout<< un.i <<endl;    //98
    cout<< un.c <<endl;   //b
    cout<< un.b <<endl;   //1
}
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
09.03.2011, 19:36     bool + int + char в одну переменную #13
dimon1984,
C++
1
 cout<< un.b <<endl;   //1
у меня выводит 98. (code::blocks & mingw)
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
09.03.2011, 19:39     bool + int + char в одну переменную #14
Цитата Сообщение от Evg Посмотреть сообщение
Вы пока подумайте, а потом скину одно очень хитрож..ое решение, которое тем не менее является стандартной практикой и видел во многих gnu'тых программах
а что за способ то ?
C++
1
2
3
4
    void** a=new void*[3];
    a[0]=new int();
    a[1]=new bool();
    a[2]=new char[10];
По сути можно же или хранить в структурах(классах) или выделять самому память ... Можно еще так, но принципиально от маллока не отличается. Хотя тут хранятся указатели, а не сами переменные.
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
09.03.2011, 19:39     bool + int + char в одну переменную #15
у меня выводит 98
как может тип bool вывести 98?
Вообще да. То я проверял на VS 6
а на VS 2008 тоже 98
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
09.03.2011, 19:51     bool + int + char в одну переменную #16
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от KuKu Посмотреть сообщение
а что за способ то ?
Спрятал под cut, мало ли кому-то интересно покумекать. Объяснять не буду, опять-таки из тех соображений, что полезно будет самому понять

Вотъ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct str
{
  int i;
  bool b;
  char s[1];
};
 
struct str*
func (int i, bool b, const char *s)
{
  struct str *p;
 
  p = malloc (sizeof (struct str) + strlen (s));
  p->i = i;
  p->b = b;
  strcpy (p->s, s);
 
  return p;
}


Только автору не рекомендую такое показывать преподавателю, ибо средний тупой преподаватель такое не осилит, а потому не примет
silent_1991
09.03.2011, 19:57
  #17

Не по теме:

Evg, а смысл только в том, чтобы все данные располагались в одной непрерывной области памяти (а не раздельно, в структуре указатель на char, а сама строка отдельным куском)?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2011, 20:02     bool + int + char в одну переменную
Еще ссылки по теме:

Типы bool и int C++
Сложение массива типа char в одну переменную C++
C++ Подскажите пожалуйста с int main(int argc, char*argv[])

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
09.03.2011, 20:02     bool + int + char в одну переменную #18
Сообщение было отмечено автором темы, экспертом или модератором как ответ
silent_1991, так удобнее. Один malloc вместо двух. Когда у тебя миллион экземпляров, это может оказаться существенным. Плюс отсутствие памяти для хранения указателя. Таким способо можно хранить не только строки, но и любые данные. Это некий вариант реализации экземпляров разной длины но одного и того же типа. Понятно, что такое будет работать только при динамическом выделении памяти
Yandex
Объявления
09.03.2011, 20:02     bool + int + char в одну переменную
Ответ Создать тему
Опции темы

Текущее время: 14:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru