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

qwe*_*101 6 c++ delphi translation operators

我正在尝试将一个巨大的项目从C++翻译成Delphi,我正在完成翻译.我留下的一件事是'\ 0'怪物.

if (*asmcmd=='\0' || *asmcmd==';')
Run Code Online (Sandbox Code Playgroud)

其中asmcmd是char*.

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

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

if(asmcmd^=0) or (asmcmd^=';') then ...
Run Code Online (Sandbox Code Playgroud)

其中asmcmd是PAnsiChar.

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

tda*_*ers 13

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

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

  • 可能是卷曲的......但重要的是要知道你什么时候应该**使用''\ 0'`.一个例子是`for(char*c = str;*c!='\ 0'; c ++)`vs` for(int i = 0; i <strlen(str); i ++)`.(当然,根据您的应用程序,您可能会发现无论如何都不需要迭代字符串中的字符.) (3认同)
  • @David:"`*c!='\ 0'`"为什么不只是`(char*c = str;*c; c ++)`? (3认同)

Dan*_*ite 5

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

  • `\0` 不是 `null` 而是 `NUL` :) 前者是指针,后者是字符。 (2认同)
  • 没有应用任何代码格式的单词 *null* 只是一个普通的英语单词,在谈论字符 0 时完全可以使用。它是空字符,其 ASCII 名称是 NUL。同样,值为 2 的字符是文本开始字符,其名称为 STX。 (2认同)

Cli*_*ord 5

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

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

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

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

请注意,在C++中,字符常量如'\0''a'具有类型char.在C中,由于可能不明原因,它有类型int.