在c中使用ls命令实现解析



我正试图在C中使用-a,-l等几个参数实现ls命令…或-la,但我有问题的解析,当我使用输入我得到分割故障,这是-a参数的一个例子:

int comparator(char *av) {
int i = 0;
if (my_strcmp((av[i]), "-a") == 0)
return 0;
else
return 1;
}
int my_ls_a(char *path) {
int comp = comparator(path);
DIR *pdirec = opendir(".");
struct dirent *direc;
direc = readdir(pdirec);

while (direc != NULL || comp == 0) {
my_printf("%s  ", direc->d_name);
direc = readdir(pdirec);
}
if ((path = readdir(pdirec)) == NULL)
my_printf("n");
if (pdirec == NULL)
return (84);
closedir(pdirec);
return (0);
}

这是我的main:

int main(int ac, char *av[]) {  
if (ac == 1)
my_ls_a(av[0]);
return 0;
}

顺便说一下,我已经有了所有的#include在a .h。

当我只使用main函数时,它可以工作,但当我添加参数-a时则不行。

使用getopt()进行参数解析可能比编写自己的解析器更好。

您在my_strcmp((av[i]), "-a")中的comparator函数中有未定义的行为,因为av被定义为char *,因此您正在传递my_strcmp可能期望指针的字符。

你应该用-Wall -Werror来编译,以避免这种愚蠢的错误。

不清楚为什么你只传递一个参数给my_ls_a。您应该传递ac和参数数组av,并迭代参数以解析选项。

最新更新