一点点strtok()乐趣

时间:2012-10-01 01:23:29

标签: c strtok

我不是最好的指针,所以也许你可以看到我做错了什么。

假设我有一个像这样初始化的数组:

char *arrayOfCommands[]={"ls -l", "wc -l"};

我的目标是从这个数组中获取一个名为 char * currentCommand 的数组,该数组查看arrayOfCommands的特定单元格,并将命令分隔成空格。

我的最终目标是在每个循环上都有一个新的currentCommand数组,每个循环看起来像这样:

First Loop:  
currentCommand = [ls][-l]

First Loop:  
currentCommand = [wc][-l]

这是我到目前为止的代码:

for (i = 0; i < 2; ++i) {
    char str[] = arrayOfCommands[i];
    char * currentCommand;
    printf ("Splitting string \"%s\" into tokens:\n",str);
    currentCommand = strtok (str, " ");
    while (currentCommand != NULL){
        printf ("%s\n",currentCommand);
        currentCommand = strtok (NULL, " ");
    }

    .
    .
    .

    //Use the currentCommand array (and be done with it)
    //Return to top
}

任何帮助将不胜感激! :)

更新

for (i = 0; i < commands; ++i) {
    char str[2];
    strncpy(str, arrayOfCommands[i], 2);
    char *currentCommand[10];
    printf ("Splitting string \"%s\" into tokens:\n",str);
    currentCommand = strtok (str, DELIM);
    while (currentCommand != NULL){
        printf ("%s\n",currentCommand);
        currentCommand = strtok (NULL, DELIM);
    }
}

我收到此错误:**分配中不兼容的类型**
它正在谈论我正在通过strtok函数的“str”。

1 个答案:

答案 0 :(得分:2)

strtok通过修改您传递的字符串来操作;使用某些手册页时很容易错过。数组中的每个命令都是一个文字字符串:尝试修改它们会导致问题。因此,在将strtokchar str[] = arrayOfCommands[i]; 一起使用之前,您需要对每个命令进行复制

此外,这是数组的无效初始化:

str

strncpy声明为一个固定大小的数组,然后使用strtok制作每个命令的副本,然后使用char str[MAX_COMMAND_LEN + 1]; strncpy(str, arrayOfCommands[i], MAX_COMMAND_LEN); // ... 对其进行标记:

{{1}}