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

Wladius

Например есть структура
struct StrDL
{
    char Str;
    char Simv;
};
и как выделить память под Str ? Типа этого например char *Str=(char*)malloc(1);
struct StrDL
{
    char *Str;
    char Simv;
};
 
int main()
{
StrDL Stroka;
 
Stroka.Str=(char*)malloc(1);
Так правильно?
14 ответов

Wladius

Можно было бы перегрузить cout для wchar_t,
Так cout это тип basic_ostream, а wcout - basic_ostream


Wladius

struct StrDL
{
    char Str;
    char Simv;
};
сам разницу видишь??
struct StrDL
{
    char *Str;
    char Simv;
};
в первом случае char во втором указатель для первого случая нельзя для второго выделяй сколько душе угодно не забудь потом удалить


Wladius

сам разницу видишь??
Я думаю, в первом сообщении ТС просто ошибся, поэтому и внес исправления в код.Интересно, ТС все сообщения в ветке плюсует?


Wladius

Интересно, ТС все сообщения в ветке плюсует?
Абсолютно все, люди же старались писали, надо и плюсануть)


Wladius

Так cout это тип basic_ostream, а wcout - basic_ostream
Так это в тот же огород: перегрузка для разных параметров существует, а для разных возвращаемых значений - нет!


Wladius

Так это в тот же огород: перегрузка для разных параметров существует, а для разных возвращаемых значений - нет!
Потому что возвращаемый параметр может быть проигнорирован.


Wladius

Stroka.Str=(char*)malloc(1*sizeof(char));
Но, поскольку мы в разделе С++, лучше
Stroka.Str=new char;


Wladius

Выделять 1 символ через new это, конечно, круто И, кстати, sizeof(char) по определению 1.


Wladius

sizeof(char) по определению 1.
С чего бы это? Для уникода - 2.


Wladius

zss, стандарт С++ 5.3.3
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1.


Wladius

Решил проверить про 2 байта и получил интересный результат:
#include <iostream>
int main()
{
    wchar_t x=L'Ы';
    std::cout<<x<<endl;
    int i=sizeof(x);
    std::cout<<i<<endl;
    return 0;
}
Вместо буквы Ы выводится 1067


Wladius

zss, двухбайтные символы выводятся при помощи wcout. А для русских еще нужно локаль сменить.


Wladius

zss, так wchar_t это же не char. И cout это не wcout.


Wladius

М-дааа! Не все ладно в Датском королевстве! Можно было бы перегрузить cout для wchar_t, да и устанавливать локаль в уникоде - нонсенс.