簡體   English   中英

從字符串文字初始化char數組

[英]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; 並按價值返回,利用復制省略。

在初始化時,你可能會想到字符串末尾的'\\0'字符,所以你總是需要再多一個字符串來使它工作:

struct T
{
    char id[5];
};

看這個例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM