$ 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
此程序中的记忆应该动态制作 (不提前知道字符串大小)
答案 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;
}
只是这个想法,希望它有所帮助