在C编程中:我是否需要考虑' \ 0' (null终止符)当mallocing空间为新字符串

时间:2013-04-18 23:59:26

标签: c malloc

例如,假设我想将字符串“str1”复制到新字符串“str2”:

void function(const char* str1){
    char* str2;
    str2 = (char *) malloc(sizeof(char) * (strlen(str1) + 1));
    strcpy(str2, str1);
    ...
}

malloc的参数应该是:

sizeof(char) * (strlen(str1)+1)

或只是:

sizeof(char) * strlen(str1)

4 个答案:

答案 0 :(得分:6)

是的,您需要+1 - strlen返回字符串长度;存储一个字符串,你需要存储它的长度加上NULL终结符的额外位置。

话虽如此,在这个具体的例子中(我确信这只是一个例子),你可以使用strdup

答案 1 :(得分:1)

strcpy()函数复制包含终止“\ 0”字符的字符串,因此您需要+1。

答案 2 :(得分:1)

是的,当然你必须考虑'\ 0'。所以:

strlen(str1)+1U

是你想要的。在这种情况下,请考虑strdup

答案 3 :(得分:0)

您可以使用malloc()代替使用calloc(),而{{1}}会自动为您终止。