我正在尝试获取一个给定的程序并将其转换为一个函数(以便我可以修改它以进行递归调用)。最初的分配是用于目录遍历(深度优先)。这只是为了帮助我开始。
原始程序:
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
struct dirent *direntp;
DIR *dirp;
if (argc != 2) {
fprintf(stderr, "Usage: %s directory_name\n", argv[0]);
return 1;
}
if ((dirp = opendir(argv[1])) == NULL) {
perror ("Failed to open directory");
return 1;
}
while ((direntp = readdir(dirp)) != NULL)
printf("%s\n", direntp->d_name);
while ((closedir(dirp) == -1) && (errno == EINTR)) ;
return 0;
}
该程序完美运行。但是当我把它变成一个函数时,我得到了一个错误。我相信这与通过
char *argv[]
这是我到目前为止尝试制作的代码,main.c:
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
int shownames(char *argv[]);
int main(int argc, char *argv[]) {
struct dirent *direntp;
DIR *dirp;
if (argc !=2) {
fprintf(stderr, "Usage: %s directory_name\n", argv[0]);
return 1;
}
shownames(*argv[]);
return 0;
}
和 shownames.c:
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
int shownames(char *argv[]) {
struct dirent *direntp;
DIR *dirp;
if ((dirp = opendir(argv[1])) == NULL) {
perror ("Failed to open directory");
return 1;
}
while ((direntp = readdir (dirp)) != NULL)
printf("%s\n", direntp->d_name);
while ((closedir(dirp) == -1) && (errno == EINTR)) ;
return 0;
}
我知道这可能是一个相当容易的错误,我似乎无法弄清楚我做错了什么。任何帮助将不胜感激。谢谢!