[英]in c++ is this a good practice to initialize char array with string literal?
[英]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.