我想知道C编译器如何为你自己初始化的字符数组分配内存,例如:
char example[] = "An example string";
如果它是单个字符,则为8 byte
,那么示例是17 bytes
还是更多,因为它需要\0
来完成它?
还是高估了它需要多少内存?
答案 0 :(得分:3)
此代码:
#include <stdio.h>
int main(void)
{
char example[] = "An example string";
printf("%zu", sizeof(example));
}
编译:
gcc -std=c99 -o proof proof.c
返回:
18 (字节,而不是位)
由于字符串末尾的\0
字符
答案 1 :(得分:0)
\0
strlen
的空(n
)终止字符串的大小为n+1
。如你所说,空字符的一个额外内容。
如果字符串字符未被终止,则strlen
等标准调用无法正常查找终止\0
。
答案 2 :(得分:0)
单个字符应使用一个字节。
字符串自动为零终结符,并且需要比字符串中的字符多一个字节。如果使用" "
,则始终添加零终止符。
您可以尝试使用strlen
和strnlen
。
char cSample = 'T'; // one byte
char caSample[] = "T" //two bytes
答案 3 :(得分:0)
字符串的大小为18字节,包括&#39; \ 0&#39;字符。但是长度将是17。
例如:
char arr[]="";
这里分配了空字符串,但它的大小= 1字节,因为空字符&#39; \ 0&#39;。示例string ""
的长度为零。