我用字符串文字初始化了一个 C++ 字符串,并用 NULL 替换了一个 char。
当用 cout <<
打印时打印完整字符串,NULL 字符打印为空白。
当打印为 c_str
时字符串打印按预期在 NULL 字符处停止。
我有点困惑。该 Action 是否来自 cout
?或 string
?
int main(){
std::string a("ab0cd");
a[2] = '\0'; // '\0' is null char
std::cout << a << std::endl; // abcd
std::cout << a.c_str() << std::endl; // ab
}
测试一下 online .
不知道是不是环境有关,反正我是在Windows 10下用VSCode工作
最佳答案
首先,您可以将程序缩小到以下范围:
#include <iostream>
#include <string>
int main(){
std::string a("ab0cd");
a[2] = '\0'; // replace '0' with '\0' (same result as NULL, just cleaner)
std::cout << a << "->" << a.c_str();
}
这打印
abcd->ab
那是因为 std::string
的长度是已知的。所以它会打印它的所有字符,并且在遇到空字符时不会停止。空字符'\0'
(相当于NULL
的值[都是0,类型不同]),是不可打印的,所以你只看到 4 个字符。 (但这取决于您使用的终端,有些可能会打印占位符)
const char*
表示(通常)一个以 null 结尾的字符串。因此,当打印 const char*
时,它的长度未知并且会打印字符,直到遇到空字符。
关于c++ - 带有空字符的 std::string 是否可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59528273/