![](/img/trans.png)
[英]Why can't i construct a std::string from a single char in C++?
[英]Why can't I construct a string with a NULL char* in C++?
在 C++ 中,為什么下面的代碼會拋出運行時錯誤? 有人可以為我解釋一下嗎?
char* p = NULL;
string str(p);
我在 VS2013 和 Codeblocks 中嘗試過這個,但都出現了運行時錯誤。
構造函數string::string(const char *)
要求參數指向以空字符結尾的字符數組的第一個元素。 您違反了該要求。
作為參考,[string.cons]:
basic_string(const charT* s, const Allocator& a = Allocator());
要求:
s
指向至少包含traits::length(s) + 1
個charT
元素的charT
。
(它是traits::length(s)
)需要數組的空終止,參見 [char.traits.require]。)
字符串類的構造函數需要一個指向有效字符串的指針。 而空指針不是。 但是運行時庫可能會也可能不會檢查給定的指針是否為空。 因此,在一種環境中,代碼可能只是崩潰,而在另一種環境中,運行時庫可能會以另一種方式處理錯誤,例如拋出異常。
注意通過
char* p = NULL;
您沒有創建空字符串,而是創建了一個值為 0 的指針,因此指向了一個非法地址。 如果你想創建一個指向空字符串的指針,你應該寫:
char* p = "";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.