Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
#1

Выделение памяти под переменную в структуре - C++

23.04.2013, 09:47. Просмотров 635. Ответов 15
Метки нет (Все метки)

Например есть структура
C++
1
2
3
4
5
struct StrDL
{
    char Str;
    char Simv;
};
и как выделить память под Str ? Типа этого например char *Str=(char*)malloc(1);

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
struct StrDL
{
    char *Str;
    char Simv;
};
 
int main()
{
StrDL Stroka;
 
Stroka.Str=(char*)malloc(1);
Так правильно?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2013, 09:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение памяти под переменную в структуре (C++):

Выделение памяти под динамический двумерный массив в структуре - C++
Доброво времени суток, дорогие товарищи-кодеры! Работав проектом, столкнулся с тем что удобно было бы запилить двумерный динамик в...

Выделение памяти под переменную - C++
Драсте, уважаемые. Мне надо выделить переменную на 25мег, чтоб в ней хранить все просчёты выполненые программой. (Пробовал в BCB6 и в BCW...

Выделение памяти под структуры - C++
Когда я только знакомился с кодингом на С(С++) я скачивал с инета очень много всякой литературы... Так вот... Недавно я начал заново...

Выделение памяти под структуру - C++
Доброго дня, товарисчи. В общем, возникла проблема при выделении памяти для структуры. Подскажите, пожалуйста, в чем ошибка. Собсна сам...

Выделение памяти под матрицу - C++
Существует такой класс: class matr{ public: double **m; // адрес матрицы int mi, my; //стобцы, строки //функции ...

Выделение памяти под массивы - C++
int **mas1 = new int*; for (int e = 0; e < q; e++) mas1 = new int; int **mas2 = new int*; for (int q = 0; q < e;...

15
zss
Модератор
Эксперт С++
6575 / 6137 / 2021
Регистрация: 18.12.2011
Сообщений: 15,992
Завершенные тесты: 1
23.04.2013, 09:55 #2
C++
1
Stroka.Str=(char*)malloc(1*sizeof(char));
Но, поскольку мы в разделе С++, лучше
C++
1
Stroka.Str=new char;
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 10:33 #3
Выделять 1 символ через new это, конечно, круто
И, кстати, sizeof(char) по определению 1.
1
zss
Модератор
Эксперт С++
6575 / 6137 / 2021
Регистрация: 18.12.2011
Сообщений: 15,992
Завершенные тесты: 1
23.04.2013, 10:46 #4
Цитата Сообщение от Tulosba Посмотреть сообщение
sizeof(char) по определению 1.
С чего бы это? Для уникода - 2.
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 10:59 #5
zss, стандарт С++ 5.3.3
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1.
2
zss
Модератор
Эксперт С++
6575 / 6137 / 2021
Регистрация: 18.12.2011
Сообщений: 15,992
Завершенные тесты: 1
23.04.2013, 11:09 #6
Решил проверить про 2 байта и получил интересный результат:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main()
{
    wchar_t x=L'Ы';
    std::cout<<x<<endl;
    int i=sizeof(x);
    std::cout<<i<<endl;
    return 0;
}
Вместо буквы Ы выводится
1067
1
nonedark2008
933 / 672 / 148
Регистрация: 28.07.2012
Сообщений: 1,837
23.04.2013, 11:13 #7
zss, двухбайтные символы выводятся при помощи wcout. А для русских еще нужно локаль сменить.
2
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 11:14 #8
zss, так wchar_t это же не char. И cout это не wcout.
1
zss
Модератор
Эксперт С++
6575 / 6137 / 2021
Регистрация: 18.12.2011
Сообщений: 15,992
Завершенные тесты: 1
23.04.2013, 11:27 #9
М-дааа! Не все ладно в Датском королевстве!
Можно было бы перегрузить cout для wchar_t,
да и устанавливать локаль в уникоде - нонсенс.
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 11:44 #10
Цитата Сообщение от zss Посмотреть сообщение
Можно было бы перегрузить cout для wchar_t,
Так cout это тип basic_ostream<char>, а wcout - basic_ostream<wchar_t>
2
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,240
23.04.2013, 11:48 #11
Цитата Сообщение от Wladius Посмотреть сообщение
C++
1
2
3
4
5
struct StrDL
{
    char Str;
    char Simv;
};
сам разницу видишь??

Цитата Сообщение от Wladius Посмотреть сообщение
C++
1
2
3
4
5
struct StrDL
{
    char *Str;
    char Simv;
};
в первом случае char во втором указатель
для первого случая нельзя
для второго выделяй сколько душе угодно
не забудь потом удалить
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 12:05 #12
Цитата Сообщение от ValeryS Посмотреть сообщение
сам разницу видишь??
Я думаю, в первом сообщении ТС просто ошибся, поэтому и внес исправления в код.

Добавлено через 14 минут
Интересно, ТС все сообщения в ветке плюсует?
1
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
23.04.2013, 12:07  [ТС] #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Tulosba Посмотреть сообщение
Интересно, ТС все сообщения в ветке плюсует?
Абсолютно все, люди же старались писали, надо и плюсануть)
4
zss
Модератор
Эксперт С++
6575 / 6137 / 2021
Регистрация: 18.12.2011
Сообщений: 15,992
Завершенные тесты: 1
23.04.2013, 20:08 #14
Цитата Сообщение от Tulosba Посмотреть сообщение
Так cout это тип basic_ostream<char>, а wcout - basic_ostream<wchar_t>
Так это в тот же огород: перегрузка для разных параметров существует,
а для разных возвращаемых значений - нет!
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 20:21 #15
Цитата Сообщение от zss Посмотреть сообщение
Так это в тот же огород: перегрузка для разных параметров существует,
а для разных возвращаемых значений - нет!
Потому что возвращаемый параметр может быть проигнорирован.
1
23.04.2013, 20:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 20:21
Привет! Вот еще темы с ответами:

Выделение памяти под масссив - C++
Как занести данные в двумерный массив с клавиатуры? пользователь должен сам ввести размерность

Выделение памяти под wchar_t - C++
вот такой код: char *str=new char; strcpy(str,&quot;stroka&quot;); int l=strlen(str); wchar_t *wstr=new wchar_t; mbstowcs(wstr,str,l); ...

Выделение памяти под файл - C++
Всем доброго времени суток. Написал некоторую структуру, работают все пунктики, все функции, но нашёлся недочёт. Если записывать в файл...

Выделение памяти под массив - C++
в массиве данных хранять в последовательных ячейках памяти В программе, выделенна память под массив, для ввода данных пользователем. ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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