char定义所需的内存空间

时间:2017-05-30 06:50:36

标签: c arrays memory char

char txt[20] = "Hello World!\0";

上述定义分配了多少字节? 考虑一个char占用1个字节,一个int 2个字节。 请注意,最后只有一个"\0。 如何计算上面定义占用的很多字节?

2 个答案:

答案 0 :(得分:5)

语句char txt[20]="Hello World!\0"实际上包括两部分,一个定义部分和一个初始化部分。 char txt[20],定义部分,告诉编译器保留20个字符大小的元素(在本例中为20个字节),而不管稍后用于初始化数组的内容。初始化部分="Hello World!\0"然后"预填充"带有文字Hello World!\0字符的保留内存。请注意,实际上没有必要在字符串中显式写\0,因为字符串文字本身由\0字符终止。所以你应该写char txt[20]="Hello World!"。如果字符串文字的长度小于分配的内存,则可以。如果用于初始化的字符串文字的长度超过了数组的长度,则至少会得到编译器警告。

但是,请注意,如果编写char txt[]="Hello World!",则保留的内存长度将与初始字符串文字的长度完全相同。

关于数组初始化,您可以授予cppreference.com。关于"变量定义的讨论"与"变量声明",我觉得这个SO answer非常有帮助。

答案 1 :(得分:1)

C中双引号内的任何内容都被视为最终为空终止的字符串。您最后不必添加\ 0。

您可以使用strlen(arr)+1来获取char的大小。这里是+1,因为strlen不计算空终止。