如何修改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_namen", argv[0]);
      return 1; 
   }   
   if ((dirp = opendir(argv[1])) == NULL) {
      perror ("Failed to open directory");
      return 1;
   }   
   while ((direntp = readdir(dirp)) != NULL)
      printf("%sn", 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_namen", argv[0]);
        return 1;
    }
    shownames(*argv[]);
    return 0;
}

和显示名称。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("%sn", direntp->d_name);
    while ((closedir(dirp) == -1) && (errno == EINTR)) ;
    return 0;
}

我知道这可能是一个相当容易的错误,我只是似乎不明白自己做错了什么。如有任何帮助,我们将不胜感激。谢谢

是否出现编译器错误?因为正如mbratch所说,shownames(*argv[]);不是有效的语法;特别是,空方括号[]用于声明未知长度的数组,而不是用于使用该数组。试试看:

shownames( argv );

此外,您将忽略shownames的返回值。你可能想以结束

return shownames( argv );

相关内容

  • 没有找到相关文章