C语言:如何从函数

时间:2017-12-21 19:02:11

标签: c

所以我有这个用户输入:

char usercommand[512];
fgets(usercommand, 512, stdin);

我希望按空格分割这一行并填充我的array。 所以我有array

char arguments[2];

这是function

void parseuserinput(char *c, char *arr)
{
    int i = 0;
    char * pch;
    pch = strtok(c, " ");
    while (pch)
    {
        arr[i] = pch;
        i++;
        pch = strtok(NULL, "");
    }
}

用法:

parseuserinput(usercommand, arguments);

我的array仍然是空的,虽然我可以看到我的function parseuserinput将元素插入我的array

1 个答案:

答案 0 :(得分:1)

您正在将指针值存储在char类型的变量中。然后你指向字符串的一部分。一种可能的解决方案是使用char* arguments[2],然后使用strdup()复制字符串并将重复字符串的地址存储在char *[]中。

void parseuserinput(char *c, char *arr[])
{
    int i = 0;
    char * pch;
    pch = strtok(c, " ");
    while (pch)
    {
        arr[i] = strdup(pch);
        ...
    }
}

在这里,我们复制了string指向的每个标记化pch并将其存储起来。将char*数组衰减为指向数组第一个元素的指针使我们能够对其进行更改,从而让我们实现从函数返回值。

已填写char*[]的多少个职位。您正在递增i,此i inturn表示正确填充的char*数组的元素数。您可以从函数返回它,以便向被调用者函数提供有关正确填充的元素数量的想法。

int parseuserinput(char *c, char *arr)
{
    ...
    return i;
}

strdup - 检查它的返回值,并在使用完毕后将其释放。