这一定是有史以来最愚蠢的问题之一,但我的大脑目前似乎根本没有工作。出于测试目的,我需要空字符串的位表示 做一些硬件调试。
换句话说,C函数的输入将是空字符串,即“”,现在我想知道如何将空字符串表示为64位值。这只是一个64个零的序列还是我想念这里的东西?
谢谢!
答案 0 :(得分:2)
“C-string”是一个带有零元素的字符数组;在大多数情况下,它会衰减指向其第一个元素的指针。另外,通常接受converse:指向char的指针(通常)被假定为指向具有(后续)零元素的字符数组(的一部分)的指针。
如果将“空字符串”解释为0个元素的数组,那么在C语言中确实没有这个概念
如果将“空字符串”解释为第一个元素为0的N个元素的数组,则该第一个元素的位表示为CHAR_BIT
二进制0(通常为8)。
如果将“空字符串”解释为指向NULL的指针,则该指针的位表示是实现定义的,但将其与0
进行比较必须产生“真”。
/* 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 */
答案 1 :(得分:0)
是的,字符串终止符的值为0. 64位表示确实是64个零。
答案 2 :(得分:0)
C字符串终止字符为\0
(所有位都设置为零)。其余位不必总是零:如果通过将其第一个char设置为\0
来清空该字符串,则其他字符将不会更改。设置为零的64位序列是空C字符串的一个表示。
答案 3 :(得分:0)
第一个char将是'\ 0',它将是一个空终止符。在内存中,之前的char设置为NULL之前的字符仍然存在。所以让string = Hello World,然后string = \ 0。记忆看起来像'\ 0','e','l','l','o','','W','o','r','l','d',' !”。 所以如果你将string初始化为null。它首先是\ 0的字符,其余的将位设置为零。