我有一个带有char数组的结构,但是如果字符串变长,我找不到一个合适的方法来初始化它。
struct T
{
char id[4];
};
T t{ 'a','b', 'c','d'}; // case 1: OK
T t{"abcd"}; // case 2: ERROR, "abcd" size is 5, too long for id
我得到以下错误:
error: initializer-string for array of chars is too long [-fpermissive]
T t{"abcd"};
原因是字符串文字“abcd”包含空终止符,因此大小为5。
允许使用此语法C99 string literals,如何在C ++ 11中解决这个问题?
答案 0 :(得分:3)
你运气不好。如果您无法更改T
,则除非您放弃直接初始化,否则没有解决方法。您必须使用T t{'a', 'b', 'c'};
等。这是因为T
是一个聚合,因此初始化的唯一形式是为每个元素传递实际的初始值设定项。
当然你可以编写一个函数,例如:
T t = T_from_literal("abcdefgh...");
该函数使用std::copy
或类似函数将字符复制到T t;
并按值返回,并利用复制省略。
答案 1 :(得分:0)