如何用strtok_r函数解析;比如将argv转换为main函数

时间:2014-03-08 16:17:26

标签: c parsing main

$ echo x y z

如果你这样做,你得到

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

我想知道这个原则。

我想在以下条件下制作该程序。

  • input:string(type:char *

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

打印

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

此程序中的记忆应该动态制作 (不提前知道字符串大小)

1 个答案:

答案 0 :(得分:2)

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

有点像

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

只是这个想法,希望它有所帮助