我很好奇如何为char **分配内存,因为我不知道我将拥有多少单词以及单词的最大长度是多少。 我需要在多个标记(单词)上划分字符串(我得到char *)并在char **中保存单独的单词。 我明白我可以为* char分配大小为(字符串长度+ 1)和每个char [i]我也可以分配(字符串长度+ 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));
这是对的吗? 如果效率更高,我可以这样做吗?
答案 0 :(得分:0)
只需运行一次strlen()
并保存该变量,就可以加快速度。你也在分配超出你需要的方式。首先找出你有多少单词,然后按char **words
分配,然后为每个单词words[i]
分配足够的单词。
答案 1 :(得分:0)
您不需要分别为每个单词分配内存。相反,您可以使用strdup(str)
(或malloc(strlen(str)+1)
和strcpy()
)复制整个字符串,并使用'\0'
替换单词分隔符来修改副本(例如strtok()
一样)。
关于最大字数:如果两个背对背分隔符要在它们之间形成一个空字,则可以有strlen(str)+1个字;如果两个或多个连续的分隔符字符被认为是单个分隔符,则只有一半的单词。