0
这是分配内存以存储两个级联字符串的正确方法吗?为两个级联字符串分配内存
size_t len1 = strlen(first);
size_t len2 = strlen(second);
char * s = malloc(len1 + len2 + 2);
还是应该用malloc(len1 + len2 + 1)
?
这是分配内存以存储两个级联字符串的正确方法吗?为两个级联字符串分配内存
size_t len1 = strlen(first);
size_t len2 = strlen(second);
char * s = malloc(len1 + len2 + 2);
还是应该用malloc(len1 + len2 + 1)
?
让我们看看有哪些需要存储的字符串:
每个字符'\0'
,或者只是0
)这使得它strlen(first) + strlen(second) + 1
:
char *s = malloc(len1 + len2 + 1);
应该
char * s = malloc(len1 + len2 + 1); // 1 more space for \0
为NUL
终止分配一个更大的空间(字节)。
你只需要使用'len1 + len2 + 1';如果你使用'2',你将'浪费'一个完整的字节(但是内存管理器可能会分配多达15个额外的字节,所以你可能不会注意到)。 –