题
考虑
#include <string>
#include <iostream>
int main()
{
/*
hello
5
hel
3
*/
char a[] = "hello";
std::cout << a << std::endl;
std::cout << strlen(a) << std::endl;
a[3] = 0;
std::cout << a << std::endl;
std::cout << strlen(a) << std::endl;
/*
hello
5
hel o
5
*/
std::string b = "hello";
std::cout << b << std::endl;
std::cout << b.length() << std::endl;
b[3] = 0;
std::cout << b << std::endl;
std::cout << b.length() << std::endl;
getchar();
}
我预计 std::string
表现与 char
数组a。就是这样,在字符串中间插入null字符,将“终止”字符串。但是,事实并非如此。我的期望错了吗?
解决方案
一个 std::string
不像通常的c字符串,并且可以包含嵌入式的nul字符而没有问题。但是,如果这样做 .c_str()
返回的功能 const char *
.
其他提示
不 - std::string
s不像c“弦”那样终止。 STD ::字符串独立记录其长度。
@lou是对的:不要那样做。相反,这样做:
b.erase (3, b.length());
是的,您的期望是错误的。 std::string
是 意思是 与C字符串不同(例如,不一定存储在连续的内存 / A阵列中)。
要复制第一部分的行为,请尝试 std::cout << b.c_str()
代替 std::cout << b
.
我希望STD :: String的行为与Char Array相同。
为什么?文档中的任何地方都没有与STD :: String有关的内容。
我的建议,停止将C ++视为C加一些东西。
不隶属于 StackOverflow