0

当我不知道我将拥有多少个单词以及单词的最大长度是多少时,我很好奇如何为 char** 分配内存。我需要在多个标记(单词)上划分字符串(我得到 char*)并将单独的单词保存在 char** 中。我知道我可以将 *char 的大小分配为 (string length+1) 并且对于每个 char[i] 我也可以分配 (string length + 1) <- 如果我们将整个 sting 作为一个令牌或者我们有字符串中的每个字符作为单独的单词。所以我认为代码是:

char **words = malloc((strlen(str)+1) * sizeof(char*));
int i;
for( i=0; i < strlen(str)+1; i++)
 words[i] = malloc((strlen(str)+1) * sizeof(char));

这是对的吗?如果效率更高,我可以这样做吗?

4

2 回答 2

0

strlen()您可以通过只运行一次并保存该变量来使其更快。您分配的方式也超出了您的需要。首先找出您有多少单词并按此分配char **words,然后为words[i]每个单词分配足够的单词。

于 2014-09-05T17:23:00.750 回答
0

您不需要分别为每个单词分配内存。strdup(str)相反,您可以使用(or malloc(strlen(str)+1)and )复制整个字符串,strcpy()并通过将单词分隔符替换为'\0'(例如strtok()) 来修改副本。

关于最大字数:如果两个背靠背分隔符之间形成一个空字,可以有strlen(str)+1个字;如果两个或多个连续的分隔符被认为是一个分隔符,那么单词的数量可能只有一半。

于 2015-05-11T10:45:28.200 回答