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=]
.
单个字符应占用一个字节。
字符串自动具有零终止符,并且需要比字符串中的字符多一个字节。如果您使用 " "
,则始终添加零终止符。
您可以尝试使用 strlen
和 strnlen
。
char cSample = 'T'; // one byte
char caSample[] = "T" //two bytes
字符串的大小为 18 字节,包括 '\0' 字符。但长度将是 17.
例如:
char arr[]="";
此处分配了空字符串,但由于空字符'\0',它将具有大小=1 字节。 length 将为零 例如 string ""
.
我想知道 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=]
.
单个字符应占用一个字节。
字符串自动具有零终止符,并且需要比字符串中的字符多一个字节。如果您使用 " "
,则始终添加零终止符。
您可以尝试使用 strlen
和 strnlen
。
char cSample = 'T'; // one byte
char caSample[] = "T" //two bytes
字符串的大小为 18 字节,包括 '\0' 字符。但长度将是 17.
例如:
char arr[]="";
此处分配了空字符串,但由于空字符'\0',它将具有大小=1 字节。 length 将为零 例如 string ""
.