C:从分隔的源字符串创建字符串数组

标签 c arrays strtok

在 C(而非 C++)中将定界字符串转换为字符串数组的有效方法是什么?例如,我可能有:

char *input = "valgrind --leak-check=yes --track-origins=yes ./a.out"

源字符串总是只有一个空格作为分隔符。我想要一个由 malloc 字符串 char *myarray[] 组成的 malloc 数组,这样:

myarray[0]=="valgrind"
myarray[1]=="--leak-check=yes"
...

编辑 我必须假设 inputString 中有任意数量的标记,所以我不能将它限制为 10 个或其他数量。

我曾尝试使用 strtok 和我已实现的链表来解决一个困惑的解决方案,但 valgrind 提示太多以至于我放弃了。

(如果您想知道,这是我正在尝试编写的基本 Unix shell。)

最佳答案

什么是这样的:

char* string = "valgrind --leak-check=yes --track-origins=yes ./a.out";
char** args = (char**)malloc(MAX_ARGS*sizeof(char*));
memset(args, 0, sizeof(char*)*MAX_ARGS);

char* curToken = strtok(string, " \t");

for (int i = 0; curToken != NULL; ++i)
{
  args[i] = strdup(curToken);
  curToken = strtok(NULL, " \t");
}

关于C:从分隔的源字符串创建字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2170319/

相关文章:

C++ 无法获取 strtok 的用户输入

c - 如何在C中扫描最多10^18位的数字

c++ - 是否有可能 malloc() 分配的缓冲区与使用 mmap() 分配的另一个缓冲区重叠?

c - c 中是否有用于创建、删除或列出 btrfs 子卷的任何 BTRFS 库接口(interface)?

c++ - 通过指针从c++中的函数返回数组,但是程序如何知道数组大小?

c# - 如何在 1D 数组中使用 "flatten"或 "index"3D 数组?

javascript - 将字节数组写入文件 JavaScript

c - C 中 strtok 的奇怪行为?

c - 标记化来自 getline 的输入

c - 试图删除 c 程序中重复的 0