C内存分配

C memory allocations

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

char example[] = "An example string";

如果它是单个字符,它将是 8 byte,那么示例是 17 bytes 还是因为它需要 [=13=] 来完成它而有更多字符?

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

此代码:

#include <stdio.h>

int main(void)
{
    char example[] = "An example string";
    printf("%zu", sizeof(example));
}

编译:

gcc -std=c99 -o proof proof.c

Returns:

18 (bytes, not bits)

因为字符串末尾的[=12=]字符

strlen n 的空 ([=10=]) 终止字符串的大小是 n+1。正如你所说,空字符额外增加一个。

如果字符串文字没有终止,像 strlen 这样的标准调用将无法工作,因为它们会寻找终止的 [=10=].

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

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

您可以尝试使用 strlenstrnlen

char cSample = 'T'; // one byte

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

字符串的大小为 18 字节,包括 '\0' 字符。但长度将是 17.

例如:

char arr[]="";

此处分配了空字符串,但由于空字符'\0',它将具有大小=1 字节length 将为零 例如 string "" .