【问题标题】:String data type variable initialization字符串数据类型变量初始化
【发布时间】:2019-06-08 16:25:51
【问题描述】:

如何通过空字符('\0')初始化字符串数据类型变量???

string txt='\0'; 

是对还是错?

【问题讨论】:

  • 你真的想在字符串中嵌入一个空字符吗? string txt; 已经嵌入了一个空终止符,就像 const char* blank = "";
  • C++ 字符串不需要终止字符。 C字符串可以。请记住,在 C 和 C++ 中,单引号用于创建单个字符,而不是字符串。与 C 不同,C++ 字符串可以使用,无需准备。
  • 默认构造函数会这样做。
  • string txt; 有什么问题?
  • 你可以找到完整的string构造函数集here

标签: c++ string stdstring


【解决方案1】:

这是错误的,因为没有std::string 的构造函数接受char。如果您想构造一个 std::string ,其中包含一个空终止符(无论出于何种原因),您应该使用不同的构造函数:

std::string txt(1, '\0');

请注意,这是对它的面值提出质疑的答案。你可能根本不需要这个,但我不确定。

【讨论】:

  • 请注意,底层 char 数组有两个空终止符。 \0\0
【解决方案2】:

首先要了解,为了使std::string::c_str() 工作,std::string 总是为终止零分配空间,所以很可能默认构造函数会为你完成这项工作。

另一方面,如果您需要长度不为零且内部包含零的字符串,则有两种方法。

  1. 使用std::string txt(1, '\0'); 作为@SergeyA 被推荐的其他ansewear。 (这适用于旧的 C++03)
  2. 使用string literal suffix operators,更方便 IMO。

.

using namespace std::literals::string_literals;
auto s2 = "\0"s;

Here is live example.

【讨论】:

    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2021-05-10
    • 1970-01-01
    • 2020-11-24
    • 2023-03-21
    • 2010-11-18
    相关资源
    最近更新 更多