考虑

#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::strings不像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加一些东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top