我正在尝试使用一个函数将字符串拆分为单独的单词。该函数创建了一个数组,我可以看到该数组正在函数中工作。我的问题是当我尝试将数组作为另一个
main
数组返回到 char
函数时。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
#include <assert.h>
#include <fcntl.h>
char *commands(char *command) {
char *commands[30];
int i =0;
char *st = strtok(command, " ");
while (st != NULL) {
commands[i] = strsep(&st, " ");
st = strtok(NULL, " ");
i++;
}
for (int p = 0; p < i; p++) {
printf("inside the function still: i-> %d, command: %s\n", p, commands[p]);
}
return *commands;
}
int main(int MainArgc, char *MainArgv[]) {
size_t size = 10;
char *user_input;
char *user_commands;
int flag = 0;
user_input = (char *)malloc(size);
while (flag != EOF) {
printf("witsshell> ");
flag = getline(&user_input, &size, stdin);
user_commands = commands(user_input);
puts(&user_commands[1]);
}
return (0);
}
在代码片段中,您使用名为“commands”的函数根据空格字符拆分字符串。但是,由于该函数的范围有限,将数组返回到主函数会引起问题。因此,在使用“命令”函数处理单独的单词时,您可能需要在主函数之外创建一个新数组来克服此限制。
char** commands(char *command, int *numCommands){
char **commands = (char**)malloc(sizeof(char*) * 30);
int i = 0;
char *st = strtok(command, " ");
while(st != NULL){
commands[i] = strdup(st);
st = strtok(NULL, " ");
i++;
}
*numCommands = i;
return commands;}
您的代码中存在多个问题:
commands
修改其参数字符串。这可能会带来问题,特别是,您不能使用字符串文字调用此函数。*commands
,这是第一个单词,而不是字符串数组