gpt4 book ai didi

c - 将字符串读取为带有空格分隔参数的命令的最佳方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:08 26 4
gpt4 key购买 nike

我目前正在编写一个原始 shell,它允许用户输入一些基本命令:lscat 等。我正在从用户那里获取如下输入:ls/home/someUser/someDirectory 并将其存储在字符数组中,比如 input。我已经编写了一些这样的函数 lscat 等,它们接受一个参数并将预期结果打印到 stdout

我想知道的是:将此 input 分解为命令和参数的最佳方法是什么?对于上述示例,我想获得两个不同的 block :ls/home/someUser/someDirectory,以便我可以检查用户想要执行的命令用什么论点。当然,我可以维护指针并检查数组的前几个字符并比较它们,然后继续处理空格后的字符并相应地解析参数,但这将非常乏味且效率低下。是否有更好的方法来执行此操作,可能是内置函数?

提前致谢。

最佳答案

检查一下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char **split(char *const source, const char *const delimiter)
{
size_t length;
char **list;
size_t count;
char *pointer;
char *token;
void *saved;

if ((source == NULL) || (delimiter == NULL))
return NULL;

list = NULL;
pointer = source;
count = 0;
while ((token = strtok(pointer, delimiter)) != NULL)
{
saved = realloc(list, (1 + count) * sizeof(*list));
if (saved == NULL)
goto abort;
length = strlen(token);
list = saved;
list[count] = malloc(1 + length);
if (list[count] == NULL)
goto abort;
strcpy(list[count], token);
pointer = NULL;

count++;
}
saved = realloc(list, (1 + count) * sizeof(*list));
if (saved == NULL)
return list;
list = saved;
list[count] = NULL;

return list;
abort:
while (count != 0)
free(list[count--]);
free(list);

return NULL;
}

int main()
{
size_t k;
char string[] = "example string with spaces";
char **list;

list = split(string, " ");
if (list == NULL)
return -1;
k = 0;
while (list[k] != NULL)
{
printf("%s\n", list[k]);
free(list[k]);

k++;
}
free(list);
return 0;
}

split 函数将返回一个包含标记的 char 指针数组,并有一个标记 NULL 指针告诉您列表的末尾在哪里。

关于c - 将字符串读取为带有空格分隔参数的命令的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28117439/

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