C内存分配

时间:2015-05-12 09:02:33

标签: c arrays memory char

我想知道C编译器如何为你自己初始化的字符数组分配内存,例如:

char example[] = "An example string";

如果它是单个字符,则为8 byte,那么示例是17 bytes还是更多,因为它需要\0来完成它?

还是高估了它需要多少内存?

4 个答案:

答案 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)

单个字符应使用一个字节。

字符串自动为零终结符,并且需要比字符串中的字符多一个字节。如果使用" ",则始终添加零终止符。

您可以尝试使用strlenstrnlen

char cSample = 'T'; // one byte

char caSample[] = "T" //two bytes

答案 3 :(得分:0)

字符串的大小为18字节,包括&#39; \ 0&#39;字符。但是长度将是17。

例如:

char arr[]="";

这里分配了空字符串,但它的大小= 1字节,因为空字符&#39; \ 0&#39;。示例string ""长度为零