2011-05-24 46 views
0

這一定是有史以來最愚蠢的問題之一,但我的大腦目前似乎根本沒有工作。出於測試目的,我需要空字符串 的位表示來進行一些硬件調試。作爲位表示的空字符串輸入

換句話說,C函數的輸入將是空字符串,即「」,現在我想知道如何將空字符串表示爲64位值。這只是一個64個零的序列,或者我想念這裏的東西嗎?

謝謝!

+0

如果硬件是這樣設計的,它只會是64位。一個空字符串將全部爲零。當然,我猜想可能有一個空字符,它具有一個值,完全取決於你的實現,我想。 – 2011-05-24 12:15:02

回答

0

是的,字符串終止符的值爲0.64位表示的確是64個零。

+0

感謝pxu爲我清理這件事;)。 – Rob 2011-05-24 12:15:03

0

C字符串終止字符是\0(所有位設置爲零)。其餘位不一定總是爲零:如果通過將其第一個字符設置爲\0來清空字符串,則其他字符不會改變。 64位設置爲0的序列是一個表示一個空的C字符串。

2

「C字符串」是什麼,是一個零元素的字符數組;在大多數情況下它衰減爲指向其第一個元素的指針。另外,反過來通常也是可以接受的:(通常)指向char的指針是指向(後續的)零元素的字符數組的一部分(的一部分)。

如果您將「空字符串」解釋爲0元素的數組,那麼在C語言中確實沒有這個概念。
如果將「空字符串」解釋爲第一個元素爲0的N個元素的數組,則該第一個元素的位表示爲CHAR_BIT二進制0(通常爲8)。
如果將「空字符串」解釋爲NULL指針,則該指針的位表示是實現定義的,但將其與0進行比較必須產生「true」。

/* ERRATA: where it says "is a string" please read "can be interpreted as a string" */ 
char arr_string[10]; /* if any element is 0, this is a string */ 
char *ptr_string; /* if it points to a valid object accessible as `char` 
        ** and a subsequent valid char is 0, this is a string */ 

strcpy(arr_string, "foobar"); /* arr_string[6] == 0 */ 
ptr_string = arr_string; 

test_string_empty(arr_string);  /* not empty */ 
test_string_empty(ptr_string + 6); /* empty */ 
test_string_empty(NULL);   /* unknown */ 
0

第一個字符將是'\ 0',這將是一個空終止符。在內存中,前面的字符被設置爲NULL之前的字符仍然存在。所以讓string = Hello World,然後string = \ 0。內存看起來像'\ 0','e','l','l','o','','W','o','r','l','d',' !」。 所以如果你初始化字符串爲空。它首先是\ 0的字符,其餘的將被設置爲零。