c - 如何用strtok_r函数解析;比如让 argv 进入 main 函数

标签 c parsing program-entry-point

$ echo x y z

如果你这样做,你会得到

argv[0] = echo
argv[1] = x
argv[2] = y
argv[3] = z

我想知道这个原理。

我想制作满足以下条件的程序。

  • 输入:字符串(类型:char *)

    char * str = "echo x y z";  
    
  • 输出:字符串(类型:char **)

打印

argv[0] = echo
argv[1] = x
argv[2] = y
argv[3] = z

这个程序中的内存应该是动态生成的 (事先不知道字符串大小)

最佳答案

您可以使用默认容量初始化输出,然后在需要时,您可以根据需要重新分配内存

类似的东西

char** parse(char* input) {

    char* str = strdup(input);
    int count = 0;
    int capacity = 10;

    char** result = malloc(capacity * sizeof(char*));
    char* tok = strtok(str," "); 

    while(tok != NULL){
        if (count >= capacity) {
            capcity = 2 * capacity; // or grow it the way as you need
            result = realloc(result, capacity * sizeof(char*));
        }
        result[count++] = strdup(tok);

        tok=strtok(NULL," ");
    } 

    free(str);
    return result;
}

一点想法,希望对你有帮助

关于c - 如何用strtok_r函数解析;比如让 argv 进入 main 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22271797/

相关文章:

C - (ptr = = &ptr) 什么是*ptr?

java - 使用 jSoup 获取关闭标签 Java

parsing - 在 Common Lisp 中读取文件并转换为基于 n 元树的嵌套列表?

java - 如何解析文本文件/需要第一个字符才能在 switch 语句中使用

无法弄清楚如何正确存储命令行参数

C 字符串指针与数组

c - 这个 C 程序无法编译/运行?

c - 在 C 中传递和返回二维数组

haskell - Cabal:找不到可执行文件 test1 的 'Main-Is' 字段

c++ ‘total’ 未在此范围内声明。主要的