2010-08-06 949 views
6

我正在嘗試將一個龐大的項目從C++翻譯成Delphi,並且我正在完成翻譯。我留下的一件事是'\ 0'怪物。C++中' 0'是什麼?

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

其中asmcmd是char *。

我知道\ 0標記C++數組類型的末尾,但我需要知道它是一個字節。是0嗎?

換句話說,下面的代碼是否等價於C++行?

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

其中asmcmd是PAnsiChar。

你不需要知道德爾福回答我的問題,但告訴我\ 0作爲字節。這也可以。 :)

回答

13

'\0'等於0。這是來自C的文獻,它根本沒有任何字符串類型,而是使用char數組。空字符用於標記字符串的結尾;回想起來並不是一個非常明智的決定 - 大多數其他字符串實現在某處使用專用的計數器變量,這使得查找字符串O(1)而不是C的O(n)的末尾。

*asmcmd=='\0'只是一種使用假設語言檢查length(asmcmd) == 0asmcmd.is_empty()的複雜方式。

+3

費解,也許......但重要的是要知道你什麼時候應該使用''\ 0''。例如:for(char * c = str; * c!='\ 0'; C++)'vs'for(int i = 0; i David 2010-08-06 12:21:55

+3

@David:「'* c!='\ 0''」爲什麼不只是'(char * c = str ; * c; C++)'? – SigTerm 2010-08-06 12:30:15

+0

謝謝,這與我以爲是完全不同的。 :) – qwerty101 2010-08-06 12:33:28

3

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

+0

所以它是0,因爲我認爲。謝謝! – qwerty101 2010-08-06 12:10:23

+0

不,它只是意味着「字符串的結尾」。 – Weboide 2010-08-06 12:21:01

+2

'\ 0'不是'null',而是'NUL' :)前者是一個指針,後者是一個字符。 – fredoverflow 2010-08-06 12:39:24

5

嚴格說來,它是八進制值爲零的字符的轉義序列(當然在任何基數中也是零)。

雖然您可以使用任何以零爲前綴的數字來指定八進制字符代碼(例如'\040'是ASCII編碼中的空格字符),但您很少有理由這麼做。 '\ 0'是用於指定NUL字符的慣用語言(因爲您無法從鍵盤輸入這樣的字符或將其顯示在編輯器中)。

您可以同樣指定'\ x0',它是一個以十六進制表示的NUL字符。

在C和C++中使用NUL字符來終止存儲在字符數組中的字符串。此表示法用於字面字符串常量,並按照慣例用於由<cstring>/<string.h>庫操縱的字符串。在C++中,可以使用std :: string類。

請注意,在C++中,字符常量(如'\0''a')的類型爲char。在C中,由於可能不太明確的原因,它的類型爲int

+0

我會給予+1只是爲了說NUL而不是null,但其餘的都很好...... – 2010-08-06 14:03:02