2011-05-24 45 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的字符,其余的将被设置为零。