字符串占用多少字节,初始化为较少的字母

时间:2016-01-17 14:35:41

标签: c arrays string initialization

我需要知道这个数组会占用多少字节数:

char s[10] = "test";

由于"test" + "\0"会不会是10字节或5字节?

2 个答案:

答案 0 :(得分:2)

只是为了清楚一点

 char s[10] = "test";

此处s将占用10个字节,因为您已明确提供了大小。

OTOH,像

这样的定义
 char s[ ] = "test";

s将占用5个字节,因为数组的大小将根据提供的初始化程序确定(4个元素加上一个空终止符。)

如果是char数组,第二个被认为是更好的方法,有时它可以通过在定义大小时忘记计算空终止符的空间来避免麻烦。 / p>

考虑一下情景,

 char arr[5] = "Hello";

此处,arr的大小为5, null终止。但是如果你使用

 char arr[ ] = "Hello";

编译器将自动确定包括空终止符的大小。因此,arr的大小为6,并包含空终止符。

答案 1 :(得分:0)

在你的问题中,事实上有两个不同的问题。第一个对应于原始问题的标题

  

字符串占用多少字节,初始化为较少字母

,第二个是原始问题的正文

  

此数组占用的字节数:

char s[10] = "test";

第一个问题的答案听起来像字符串恰好占据了数组的5个元素。这就是字符串占用数组的以下元素

s[0] = 't', s[1] = 'e', s[2] = 's', s[3] = 't', s[4] = '\0'

范围[5, 9]中数组的所有其他字符将初始化为零'\0'

第二个问题的答案听起来像数组的大小恰好等于10 * sizeof( char )的{​​{1}},因为10 bytes始终等于sizeof( char )

如果你要改为写

1

那么数组的大小将等于字符串文字的大小(包括终止零),即5个字符。