我不是最好的指针,所以也许你可以看到我做错了什么。
假设我有一个像这样初始化的数组:
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”。
答案 0 :(得分:2)
strtok
通过修改您传递的字符串来操作;使用某些手册页时很容易错过。数组中的每个命令都是一个文字字符串:尝试修改它们会导致问题。因此,在将strtok
与char str[] = arrayOfCommands[i];
一起使用之前,您需要对每个命令进行复制。
此外,这是数组的无效初始化:
str
将strncpy
声明为一个固定大小的数组,然后使用strtok
制作每个命令的副本,然后使用char str[MAX_COMMAND_LEN + 1];
strncpy(str, arrayOfCommands[i], MAX_COMMAND_LEN);
// ...
对其进行标记:
{{1}}