如果我有一个声明为
的数组char arr[1] = "";
实际存储在内存中的是什么? [0]会是什么?
答案 0 :(得分:5)
字符串以空值终止。空字符串包含一个元素,即空终止符本身,即'\0'
。
char arr[1] = "";
相当于:
char arr[1] = {'\0'};
你可以想象它是如何存储在内存中的。
答案 1 :(得分:2)
a[0]
是空字符,可以称为'\0'
或0
。
根据定义,字符串是“由第一个空字符终止并包括第一个空字符的连续字符序列”。对于空字符串,终止空字符是第一个(在索引0处)。
答案 2 :(得分:2)
C字符串是零终止的。因此,"abc"
表示为{ 'a', 'b', 'c', 0 }
。
空字符串因此只有零。
这也是为什么必须始终将字符串分配为比最大可能长度大一char
的原因。
答案 3 :(得分:2)
arr[0] = 0x00;
但是,如果您没有分配任何值,如
char arr[1];
然后arr[0] = garbage value
答案 4 :(得分:2)
如果数组声明为char arr[] = "";
在这种情况下sizeof(arr) is 1 and strlen(arr) is 0
。
但是仍然可以通过添加这样的印刷来完成自我分析printf("%d", arr[0]);
这样你就可以自己理解了。
string是一个字符序列,在你的情况下,“”里面没有字符。因此,它仅在'\0'
中存储arr[0]
个字符。
答案 5 :(得分:0)
C string以NULL结尾,所以空字符串“”实际上是“\ 0”,编译器帮助这样做, 所以strlen(“”)等于0但sizeof(“”)等于1.