为两个连接的字符串分配内存

时间:2013-12-21 15:21:17

标签: c string-concatenation

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

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

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

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

2 个答案:

答案 0 :(得分:3)

让我们看一下存储字符串的必要条件:

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

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

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

答案 1 :(得分:2)

应该是

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

NUL终结符分配一个空格(字节)。