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 に答える