所以我有这个用户输入:
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
。
答案 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
- 检查它的返回值,并在使用完毕后将其释放。