字符串中的空字符

时间:2013-07-28 08:31:56

标签: c++ string null-character

来自Rules for C++ string literals escape character,Eli的回答

std::string ("0\0" "0", 3)  // String concatenation 

有效,因为此版本的构造函数采用char数组;如果您尝试将“0 \ 0”“0”作为常量字符*传递,它会将其视为C字符串,并且仅将所有内容复制到空字符。

这是否意味着空间不是为整个字符串分配的,即\ 0之后的字符串写在未分配的空格上?

此外,上面的问题是针对c ++字符串,我也观察到c字符串的相同行为。 当我在声明期间在字符串中间添加空字符时,c和c ++字符串是否相同?

2 个答案:

答案 0 :(得分:2)

将char数组复制到新对象中。如果未指定char数组的长度,C ++将复制到第一个空字符。分配了多少额外空间超出了规范的范围。与向量一样,字符串的容量可能超过存储字符串所需的量,并允许在不重定位字符串的情况下附加字符。

答案 1 :(得分:0)

采用std::string

const char*构造函数假定输入是C字符串。 C字符串被'\0'终止,因此当它到达'\ 0'字符时停止。

如果你真的想玩,你需要使用构建字符串的构造函数 char数组(不是C-String)。

STL序列容器超过自动存储所需的数量

示例:

int main () {

string s="Elephant";

s[4] ='\0'; //C++ std::string is NOT '\0' terminated
cout<<s<<endl; //Elep ant

string   x("xy\0ab");   // C-String assumed.

cout<<x; //xy
  return 0;
}