c - 当我们不知道确切的单词数和单词长度时,如何以最有效的方式为 char** 分配内存?

标签 c pointer-to-pointer

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

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));

正确吗? 如果效率更高的话可以吗?

最佳答案

您可以通过仅运行一次 strlen() 并保存该变量来加快速度。您分配的资金也超出了您的需要。首先找出您有多少个单词,并据此分配 char **words,然后为每个 words[i] 只为每个单词分配足够的空间。

关于c - 当我们不知道确切的单词数和单词长度时,如何以最有效的方式为 char** 分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25690883/

相关文章:

c - C 中是否有常量指针指向指针的机制?

c - 初始化指向结构体指针的指针

c - 'static' 函数的原型(prototype)

c - 在迭代之前在 c 中请求一个 lua 表大小

调用 shell 脚本与 C 函数

c - 在函数中通过指向多维数组的指针分配指针

c - 取消引用指向不完整类型抽象数据类型的指针

c - 在 Hp-UX ksh 中执行交互式命令(意外)并获取子进程

c - 将数据动态添加到指向函数内结构的指针数组

c - 如何将 char * 字符串转换为指向指针数组的指针并为每个索引分配指针值?