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”进行一些处理以将其转换为路径或使用“ruta”而不是“path”。

于 2012-09-13T05:01:14.693 回答
1
  1. 您必须tree在使用它或声明原型之前进行定义。
  2. tree并且main需要返回类型。
  3. path未定义并被ruta使用。想必这些应该是同一个东西。
  4. 你永远不会打电话stat来填写bufdpreaddir.

特别奖励:nivel是个坏主意。将它作为参数并将根级别传入 0 然后在对子项的每次调用中传入 pass 会更有意义nivel+1

此外,“it compiles”没有说明“it works”,尤其是在 C 语言中。

于 2012-09-13T05:07:24.663 回答