0

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

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

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”。

4

1 回答 1

2

strtok通过修改您传递的字符串进行操作;使用一些手册页时很容易忽略这一点。数组中的每个命令都是文字字符串:尝试修改它们会导致问题。因此,在将每个命令与strtok.

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

char str[] = arrayOfCommands[i];

声明str为某个固定大小的数组,然后在使用strncpy以下命令对每个命令进行标记之前用于制作每个命令的副本strtok

char str[MAX_COMMAND_LEN + 1];
strncpy(str, arrayOfCommands[i], MAX_COMMAND_LEN);

// ...
于 2012-10-01T01:33:34.417 回答