回答
C字符串是零终止的。因此,被表示为{ 'a', 'b', 'c', 0 }
。
因此空字符串只有零。
这也是为什么字符串必须始终分配为大于最大可能长度的一个char
的原因。
字符串以空终止。一个空字符串包含一个元素,即空终止符本身,即'\0'
。
char arr[1] = "";
等同于:
char arr[1] = {'\0'};
你可以想像它是如何存储在此内存。
a[0]
是空字符,其可以被称为'\0'
或0
。
根据定义,字符串是“由第一个空字符终止并且包含第一个空字符的连续字符序列”。对于空字符串,终止空字符是第一个(在索引0处)。
arr[0] = 0x00;
但是,如果没有分配任何值一样
char arr[1];
然后arr[0] = garbage value
如果数组被声明为char arr[] = "";
在这将激起更多这种情况下sizeof(arr) is 1 and strlen(arr) is 0
。
但仍然可以通过添加这样的打印来完成自我分析printf("%d", arr[0]);
这样你就可以自己理解了。
字符串是一个字符序列,在你的情况下,没有字符出现在“”中。所以它只在arr[0]
中储存'\0'
个字符。
C字符串是结束与空,所以空字符串“”实际上是“\ 0”,编译器帮忙做这个,所以 的strlen(“”)等于0,但的sizeof(“”)等于1
所以arr [1]超出范围。 – sunrain 2014-10-22 12:47:56
@Bathsheba你是对的,谢谢你的回滚。 – 2014-10-22 07:25:23