我正试图在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
,并迭代参数以解析选项。