3

例如,假设我想将字符串“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

4 回答 4

6

是的,您需要 +1 —strlen返回字符串长度;要存储一个字符串,您需要存储它的长度加上一个额外的NULL终止符点。

话虽这么说,在这个具体的例子中(我敢肯定就是这样:一个说明这一点的例子),你可以只使用strdup.

于 2013-04-19T00:01:46.730 回答
1

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

于 2013-04-19T00:01:38.613 回答
1

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

strlen(str1)+1U

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

于 2013-04-19T00:01:56.367 回答
0

malloc()您可以使用calloc()which 自动为您终止 null而不是使用。

于 2013-04-20T03:27:12.493 回答