2013-12-21 38 views
0

这是分配内存以存储两个级联字符串的正确方法吗?为两个级联字符串分配内存

size_t len1 = strlen(first); 
size_t len2 = strlen(second); 

char * s = malloc(len1 + len2 + 2); 

还是应该用malloc(len1 + len2 + 1)

+3

你只需要使用'len1 + len2 + 1';如果你使用'2',你将'浪费'一个完整的字节(但是内存管理器可能会分配多达15个额外的字节,所以你可能不会注意到)。 –

回答

3

让我们看看有哪些需要存储的字符串:

每个字符
  • 一个字节(假设非宽字符)
  • 一个尾随NULL字节('\0',或者只是0

这使得它strlen(first) + strlen(second) + 1

char *s = malloc(len1 + len2 + 1); 
2

应该

char * s = malloc(len1 + len2 + 1); // 1 more space for \0 

NUL终止分配一个更大的空间(字节)。