首页 > 解决方案 > 字符串初始化和打印

问题描述

C++ Primer,第五版第 3.2.1 条下的表 3.1指出:

string s3("value") -> s3 是字符串文字的副本,不包括 null。

我对此的解释是——当我们初始化一个类似 的字符串时string s1("value");,变量s1包含字符串的副本,末尾没有value 字符NUL

#include <iostream>

using std::cin;
using std::string;
using std::cout;
using std::endl;

int main(void)
{
        string s1("value");

        cout << s1 << endl;   // prints - value
}

那么,这个程序是否调用 UB 因为s1没有NUL终止符而我们正在打印字符串?

我问这个是因为在 C 中,尝试打印没有NUL终结符的 c 字符串会产生 UB。C++ 中的字符串不是必须以 a 结尾NUL吗?

我在这里想念什么?

标签: c++string

解决方案


C++ 中的字符串是否必须以 NUL 结尾?

取决于您所说的“字符串”是什么意思。 std::string不要以 nul 字符结尾,因为长度是已知/存储的。由返回的C 样式字符串(又名char*数组)std::string::c_str()必须以 nul 字符结尾,因为长度未知/未存储。


推荐阅读