繁体   English   中英

“\\0”是什么意思?

[英]What does '\0' mean?

我无法理解以下代码中两个不同位置的 '\\0' 是什么意思:

string x = "hhhdef\n";
cout << x << endl;
x[3]='\0';
cout << x << endl;
cout<<"hhh\0defef\n"<<endl;

结果:

高清

哈哈

呵呵

谁能给我一些指点?

C++ std::string是“计数”字符串——即,它们的长度存储为整数,并且它们可以包含任何字符。 当你用\\0替换第三个字符时,没有什么特别的事情发生——它就像是任何其他字符一样被打印出来(特别是,你的控制台只是忽略它)。

相反,在最后一行,您正在打印一个 C 字符串,其结尾由找到的第一个\\0确定。 在这种情况下, cout继续打印字符,直到找到\\0 ,在您的情况下,它位于第三个h

C++ 有两种字符串类型:

内置的 C 风格空终止字符串实际上只是字节数组和 C++ 标准库std::string类,它不是空终止。

打印以空字符结尾的字符串会打印所有内容,直到第一个空字符为止。 打印std::string打印整个字符串,而不管其中间的空字符如何。

\\0是 NULL 字符,您可以在ASCII table找到它,它的值为 0。

它用于确定 C 样式字符串的结尾。

但是,C++ 类std::string将其大小存储为整数,因此不依赖于它。

您在这里以两种不同的方式表示字符串,这就是行为不同的原因。

第二个更容易解释; 它是一个 C 风格的原始字符数组。 在 C 风格的字符串中, '\\0'表示空终止符 它用于标记字符串的结尾。 因此,任何处理/显示字符串的函数都会在遇到它时立即停止(这就是为什么最后一个字符串被截断的原因)。

第一个例子是创建一个完整的 C++ std::string对象。 这些不会为'\\0'分配任何特殊含义(它们没有空终止符)。

\\0被视为NULL字符。 它用于在 C 中标记字符串的结尾。

在 C 中,string 是指向末尾带有\\0的字符数组的指针。 因此,以下将是 C 中字符串的有效表示。

char *c =”Hello”;    // it is actually Hello\0
char c[] = {‘Y’,’o’,’\0′};

'\\0' 的应用在于确定字符串的结尾。例如:求字符串的长度。

\\0 基本上是一个空终止符,它在 C 中用于终止字符串字符的结尾,简单来说,它的值在字符中为空基本上是给编译器指示这是字符串字符的结尾让我举个例子 -当我们写 printf("Hello World"); /* Hello World\\0 在这里我们可以清楚地看到 \\0 的行为是 null ,在注释中打印字符串会给出相同的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM