'\ 0'是什么意思?

时间:2013-01-06 15:11:11

标签: c++

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

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

结果:

  

hhhdef

     

hhhef

     

HHH

任何人都可以给我一些指示吗?

6 个答案:

答案 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字符串会产生相同的输出。