char txt[20] = "Hello World!\0";
上述定义分配了多少字节?
考虑一个char
占用1个字节,一个int
2个字节。
请注意,最后只有一个"
和\0
。
如何计算上面定义占用的很多字节?
答案 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不计算空终止。