我无法理解以下代码中两个不同位置的'\ 0'是什么意思:
string x = "hhhdef\n";
cout << x << endl;
x[3]='\0';
cout << x << endl;
cout<<"hhh\0defef\n"<<endl;
结果:
hhhdef
hhhef
HHH
任何人都可以给我一些指示吗?
答案 0 :(得分:17)
C ++ std::string
s是“计数”字符串 - 即,它们的长度存储为整数,并且它们可以包含任何字符。用\0
替换第三个字符时没有任何特殊情况发生 - 它被打印成好像是任何其他字符(特别是,你的控制台只是忽略它)。
在最后一行中,您将打印一个C字符串,其结尾由找到的第一个\0
确定。在这种情况下,cout
继续打印字符,直到找到\0
,在您的情况下,它位于第三个h
之后。
答案 1 :(得分:9)
C ++有两种字符串类型:
内置的C风格的以空字符结尾的字符串,它们实际上只是字节数组,而不的C ++标准库std::string
类以null结尾。
打印以null结尾的字符串会将所有内容打印到第一个空字符。打印std::string
打印整个字符串,无论其中间是否为空字符。
答案 2 :(得分:6)
\0
是NULL字符,您可以在ASCII table
中找到它,它的值为0.
用于确定C风格字符串的结尾。
但是,C ++类std::string
将其大小存储为整数,因此不依赖于它。
答案 3 :(得分:3)
您在这里以两种不同的方式表示字符串,这就是行为不同的原因。
第二个更容易解释;它是一个C风格的原始字符数组。在C风格的字符串中,'\0'
表示 null终结符;它用于标记字符串的结尾。因此,处理/显示字符串的任何函数一旦达到它就会停止(这就是为什么你的最后一个字符串被截断)。
第一个例子是创建一个完全形成的C ++ std::string
对象。这些没有为'\0'
赋予任何特殊含义(它们没有空终止符)。
答案 4 :(得分:1)
\0
被视为NULL
字符。它用于标记C中字符串的结尾。
在C中,string是指向末尾带有\0
的字符数组的指针。因此,下面将是C中字符串的有效表示。
char *c =”Hello”; // it is actually Hello\0
char c[] = {‘Y’,’o’,’\0′};
'\ 0'的应用在于确定字符串的结尾。例如:查找字符串的长度。
答案 5 :(得分:0)
\ 0基本上是一个空终止符,在C语言中用于终止字符串字符的结尾,简单来说,它的值在字符中为null基本上使编译器指示这是字符串字符的结尾 让我举个例子- 当我们写printf(“ Hello World”); / * Hello World \ 0 在这里我们可以清楚地看到\ 0充当null,在注释中强行printinting字符串会产生相同的输出。