[英]Initialize char arrays from string literal
我有一個帶有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字符串文字 ,我該如何在C ++ 11中解決?
你運氣不好 如果您無法更改T
則除非您放棄直接初始化,否則沒有解決方法。 你必須使用T t{'a', 'b', 'c'};
這是因為T
是一個聚合,所以初始化的唯一形式是為每個元素傳遞實際的初始值設定項。
當然你可以編寫一個函數,例如:
T t = T_from_literal("abcdefgh...");
該函數使用std::copy
或類似函數將字符復制到T t;
並按價值返回,利用復制省略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.