0

如果我想在 C 中连接 2 个字符串,我必须为每个字符串分配一个额外的空字符还是一个就足够了?

int main(){
    char *s1 = NULL;
    char *s2 = NULL;
    char *s1_s2 = NULL;

    s1 = malloc(sizeof(char) * strlen("string1") + 1);
    strcpy(s1, "string1");
    s2 = malloc(sizeof(char) * strlen("string2") + 1);
    strcpy(s2, "string2");

    s1_s2 = malloc(sizeof(char) * (strlen(s1) + strlen(s2)) + 2); // shouldn't it be only 1 null char ?
    strcpy(s1_s2, s1);
    strcat(s1_s2, s2);
}

这个问题中,他们为每个字符串使用 2 个空字节。有人能解释一下吗?谢谢

4

5 回答 5

3

不,您不需要两个额外的空字节。

在内存中,您的字符串将如下所示:

s1 -> 's' 't' 'r' 'i' 'n' 'g' '1' '\0'

s2 -> 's' 't' 'r' 'i' 'n' 'g' '2' '\0'

s1_s2 -> 's' 't' 'r' 'i' 'n' 'g' '1' 's' 't' 'r' 'i' 'n' 'g' '2' '\0'
于 2012-01-24T11:55:54.707 回答
2

只需要一个。

在您链接的问题中,他们实际上还添加了一个需要额外字节的额外空格字符。

于 2012-01-24T11:54:26.617 回答
1

最后的字符串应该以一个空字节结尾,所以一个就足够了。

编辑:您发送的问题,两个字符串之间有一个空格。

strcpy(both, first);
strcat(both, " ");
strcat(both, second);
于 2012-01-24T11:54:22.117 回答
1

只需要一个。字符串末尾总是需要一个空字符,这里恰好是两个字符串的串联。

于 2012-01-24T11:54:27.947 回答
1

在您链接到的问题中,在连接在一起的字符串之间放置了一个空格。char必须为此空间分配额外的空间。

在您的示例中,您没有在字符串之间放置空格,因此只char需要一个额外的空格。

于 2012-01-24T11:56:41.350 回答