簡體   English   中英

如何在C ++中使用字符串文字初始化char的動態數組?

[英]How to initialize the dynamic array of chars with a string literal in C++?

我想做以下事情:

std::unique_ptr<char[]> buffer = new char[ /* ... */ ] { "/tmp/file-XXXXXX" };

顯然,它不起作用,因為我沒有指定新數組的大小。 在不計算字符串文字中的符號的情況下,實現目標的適當方法是什么?

也歡迎使用std::array

更新#1:即使我把數組的大小,它也不會工作。

更新#2:將一個非const訪問數組作為一個簡單的char*指針是至關重要的。

這是一個基於std::array的解決方案:

std::array<char, sizeof("/tmp/file-XXXXXX")> arr{ "/tmp/file-XXXXXX" };

您可以使用宏來減少樣板:

#define DECLARE_LITERAL_ARRAY(name, str) std::array<char, sizeof(str)> name{ str }
DECLARE_LITERAL_ARRAY(arr, "/tmp/file-XXXXXX");

sizeof在編譯時計算,因此沒有文本字符串的運行時掃描來查找其長度。 結果數組以null結尾,無論如何你可能想要它。

由於您請求動態數組並且不想計算長度,因此排除了std::array<char,N> 您所要的實際上只是std::string它是動態的(如果需要的話),並且可以從char*進行初始化而無需計算長度。 在內部,它將字符串存儲在一個平面數組中,因此您可以通過c_str()調用來使用它。

我不明白你為什么不使用std::string ; 你可以做str.empty() ? NULL : &str[0] str.empty() ? NULL : &str[0]得到一個非常量指針,因此str.c_str()的常量不會造成問題。

但是,請注意,這不是以零結尾的。

暫無
暫無

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

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