gpt4 book ai didi

c - strtok() 的一点乐趣

转载 作者:行者123 更新时间:2023-11-30 14:23:39 27 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

char str[] = arrayOfCommands[i];

str 声明为某个固定大小的数组,然后使用 strncpy 复制每个命令,然后使用 strtok 对它们进行标记:

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

// ...

关于c - strtok() 的一点乐趣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666560/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com