Я пытаюсь взять данную программу и превратить ее в функцию (чтобы я мог ее модифицировать для рекурсивного вызова). Исходное задание предназначено для обхода каталога (сначала по глубине). Это только для того, чтобы помочь мне начать.Как изменить программу на C, чтобы превратить ее в функцию
Исходная программа:
#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;
}
Я знаю, что это, вероятно, довольно простая ошибка, я просто не могу понять, что я делаю неправильно. Любая помощь была бы весьма признательна. Благодаря!
Не могли бы вы выставить сообщение об ошибке? –
Вызовите 'показанные имена (argv)' из вашего нового 'main', а не' namesames (* argv []) '. Первый - это вызов. Последнее частично относится к тому, как выглядит объявление, и это недействительный синтаксис для вызова. – lurker