特定のプログラムを取得して関数に変換しようとしています(再帰呼び出し用に変更できるようにするため)。元の割り当ては、ディレクトリ トラバーサル (深さ優先) 用です。これは、私が始めるのを助けるためのものです。
元のプログラム:
#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;
}
おそらくかなり簡単な間違いであることはわかっていますが、何が間違っているのかわかりません。どんな助けでも大歓迎です。ありがとう!