什么是C ++中的'\ 0'?

时间:2010-08-06 12:08:09

标签: c++ delphi operators translation

我正在尝试将一个庞大的项目从C ++翻译成Delphi,我正在最终确定翻译。我留下的一件事是'\ 0'怪物。

if (*asmcmd=='\0' || *asmcmd==';')

其中asmcmd是char *。

我知道\ 0标志着C ++中数组类型的结束,但我需要知道它是一个字节。是0吗?

换句话说,下面的代码是否等同于C ++行?

if(asmcmd^=0) or (asmcmd^=';') then ...

其中asmcmd是PAnsiChar。

你不需要知道Delphi来回答我的问题,但是告诉我\ 0为字节。那也行。 :)

3 个答案:

答案 0 :(得分:13)

'\0'等于0。它是C的遗物,它根本没有任何字符串类型,而是使用char数组。空字符用于标记字符串的结尾;回想起来,这不是一个非常明智的决定 - 大多数其他字符串实现在某处使用专用计数器变量,这使得查找字符串O(1)的结尾而不是C的O(n)。

*asmcmd=='\0'只是一种以假设语言检查length(asmcmd) == 0asmcmd.is_empty()的复杂方式。

答案 1 :(得分:5)

严格来说,它是八进制值为零的字符的转义序列(在任何基数中当然也为零)。

虽然您可以使用前缀为零的任何数字来指定八进制字符代码(例如'\040'是ASCII编码中的空格字符),但您很少有理由这样做。 '\ 0'是用于指定NUL字符的惯用语法(因为您无法从键盘输入这样的字符或在编辑器中显示它)。

您可以同样指定'\ x0',这是一个以十六进制表示的NUL字符。

NUL字符在C和C ++中用于终止存储在字符数组中的字符串。此表示形式用于文字字符串常量,并按惯例用于由<cstring> / <string.h>库操作的字符串。在C ++中,可以使用std :: string类。

请注意,在C ++中,'\0''a'等字符常量的类型为char。在C中,由于可能不明原因,它的类型为int

答案 2 :(得分:3)

这是nullchar0的字符。它用在字符串的末尾。