我正在尝试将一个庞大的项目从C ++翻译成Delphi,我正在最终确定翻译。我留下的一件事是'\ 0'怪物。
if (*asmcmd=='\0' || *asmcmd==';')
其中asmcmd是char *。
我知道\ 0标志着C ++中数组类型的结束,但我需要知道它是一个字节。是0吗?
换句话说,下面的代码是否等同于C ++行?
if(asmcmd^=0) or (asmcmd^=';') then ...
其中asmcmd是PAnsiChar。
你不需要知道Delphi来回答我的问题,但是告诉我\ 0为字节。那也行。 :)
答案 0 :(得分:13)
'\0'
等于0
。它是C的遗物,它根本没有任何字符串类型,而是使用char数组。空字符用于标记字符串的结尾;回想起来,这不是一个非常明智的决定 - 大多数其他字符串实现在某处使用专用计数器变量,这使得查找字符串O(1)的结尾而不是C的O(n)。
*asmcmd=='\0'
只是一种以假设语言检查length(asmcmd) == 0
或asmcmd.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)
这是null
或char
值0
的字符。它用在字符串的末尾。