Инициализация члена массива Struct char в C ++ - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь понять инициализацию структуры в C ++, в специальном элементе массива char:

struct S {
    int x;
    char str[16];
};

// (1) This would be the desired way: simple and compact, but doesn't work
S s1={.x=12, .str = "Hello2"};

// (2) Instead, this appears the correct way to do, but it is ugly and cumbersome for bigger strings
S s2={.x=25, .str = {'H','e','l','l','o', '1'}};

// (3) This works too, easy to type, but uses 2 lines and a additional function (strcpy)
S s3={.x=12};
strcpy(s3.str, "Hello3");

Почему современные C ++ не принимают форму (1)? Это был бы самый элегантный, лаконичный и практичный способ. Учитывая (2) и (3), есть ли лучший способ сделать это?

РЕДАКТИРОВАТЬ 1: Код, который я выбрал для этого вопроса, был слишком упрощен. В моем фактическом коде используется член char [] в объединении внутри структуры. Тогда std :: string не является вариантом .

1 Ответ

1 голос
/ 06 мая 2020

просто замените

S s1={.x=12, .str = "Hello2"};

формой инициализации 'C'

S s1={12, "Hello2"};

или, как сказано в комментариях, используйте std::string, который является самый элегантный, краткий и практичный способ, чем массив символов для строки, и вы сможете использовать форму инициализации C ++, которую хотели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...