簡體   English   中英

為什么我不能在 C++ 中構造一個帶有 NULL char* 的字符串?

[英]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) + 1charT元素的charT

(它是traits::length(s) )需要數組的空終止,參見 [char.traits.require]。)

字符串類的構造函數需要一個指向有效字符串的指針。 而空指針不是。 但是運行時庫可能會也可能不會檢查給定的指針是否為空。 因此,在一種環境中,代碼可能只是崩潰,而在另一種環境中,運行時庫可能會以另一種方式處理錯誤,例如拋出異常。

注意通過

char* p = NULL;

您沒有創建空字符串,而是創建了一個值為 0 的指針,因此指向了一個非法地址。 如果你想創建一個指向空字符串的指針,你應該寫:

char* p = "";

暫無
暫無

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

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