从 C 中的函数返回字符串指针数组

问题描述 投票:0回答:2

我正在尝试使用一个函数将字符串拆分为单独的单词。该函数创建了一个数组,我可以看到该数组正在函数中工作。我的问题是当我尝试将数组作为另一个

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);
}
arrays c function pointers
2个回答
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;}

0
投票

您的代码中存在多个问题:

  • 函数
    commands
    修改其参数字符串。这可能会带来问题,特别是,您不能使用字符串文字调用此函数。
  • 仅按空格分割字符串,还应该将制表符和换行符视为单词分隔符。
  • 您将单词指针存储到本地数组中而不检查溢出,如果参数字符串包含超过 30 个单词,就会发生溢出。
  • 您应该在数组末尾存储一个空指针,以便调用者检测数组的末尾。
  • 你返回
    *commands
    ,这是第一个单词,而不是字符串数组
  • 你不能返回一个本地数组,因为它一旦函数返回就变得无效
© www.soinside.com 2019 - 2024. All rights reserved.