0

我正在尝试获取一个给定的程序并将其转换为一个函数(以便我可以修改它以进行递归调用)。最初的分配是用于目录遍历(深度优先)。这只是为了帮助我开始。

原始程序:

#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;
}

我知道这可能是一个相当容易的错误,我似乎无法弄清楚我做错了什么。任何帮助将不胜感激。谢谢!

4

1 回答 1

0

您是否收到编译器错误?因为正如 mbratch 所说,shownames(*argv[]);这不是有效的语法;具体来说,空方括号 [] 用于声明一个未知长度的数组,而不是用于使用该数组。试试:

shownames( argv );

此外,您忽略了 shownames 的返回值。您可能希望以以下方式结束:

return shownames( argv );
于 2013-09-02T01:25:30.640 回答