0

C でツリー コマンドのシミュレーションを作成する必要があります。これが現在のコードです。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>


main(int argc, char *argv[]){

int i;

if(argc < 2){
    printf("\nError. Use: %s directory\n", argv[0]);
    system("exit");
}
for(i=1;i<argc;i++)
    //if(argv[i][0] != '-')
        tree(argv[i]);
}

tree(char *ruta){

DIR *dirp;
struct dirent *dp;
static nivel = 0;
struct stat buf;
char fichero[256];
int i;

if((dirp = opendir(path)) == NULL){
    perror(path);
    return;
}

while((dp = readdir(dirp)) != NULL){
    printf(fichero, "%s/%s", path, dp->d_name);
    if((buf.st_mode & S_IFMT) == S_IFDIR){
        for(i=0;i<nivel;i++)
            printf("\t");
        printf("%s\n", dp->d_name);
        ++nivel;
        tree(fichero);
        --nivel;
    }

}
}

どうやら、それは動作します!(正しくコンパイルされるため)しかし、理由はわかりません。これを実行するための正しい引数を渡すことができません。どうもありがとうございました。

4

2 に答える 2

1

「パス」がどこで定義されているかわかりませんが、「ruta」ポインターをどこでも使用していません。「ruta」で何らかの処理を行ってパスに変換するか、「path」の代わりに「ruta」を使用する必要があると思います。

于 2012-09-13T05:01:14.693 に答える
1
  1. 使用する前に定義treeするか、プロトタイプを宣言する必要があります。
  2. treemain戻り値の型が必要です。
  3. pathは定義されておらず、ruta使用されています。おそらくこれらは同じものであるはずです。
  4. から取得したファイルstatを埋めるために呼び出すことはありません。bufdpreaddir

特別ボーナス:nivel悪い考えです。これをパラメーターとして使用し、ルート レベルに 0 を渡してから、子への各呼び出しで を渡す方が理にかなっていますnivel+1

また、特に C では、「コンパイルする」は「動作する」とは何も言いません。

于 2012-09-13T05:07:24.663 に答える