仿真树命令用C

问题描述:

我要创建树命令在C模拟,这是我当前的代码:仿真树命令用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; 
    } 

} 
} 

显然,它的作品! (由于它编译正确)但我不知道为什么。我无法传递正确的参数来执行此操作。 非常感谢你,人。

+0

一开始,'的printf(fichero, “%S /%S”,路径,DP-> d_name); '应该可以读'snprintf(fichero,256,“%s /%s”,path,dp-> d_name);'。 – Mac

+0

谢谢,先生。但它还没有工作。我认为问题在于争论的传递。它不采取我给的道路。 –

  1. 在使用它或声明原型之前,您必须定义tree
  2. treemain需要返回类型。
  3. path未定义,并且使用ruta。推测这些应该是同一件事。
  4. 你永远不会打电话stat填写bufdpreaddir得到的文件。

特别奖励:nivel是一个坏主意。将它作为参数并将根级别传递为0并随后在每次调用子级时都会传递nivel+1会更好。

而且,“它编译”只字未提“它的工作原理”,尤其是在C.

我不确定在哪里定义了“路径”,但是您没有在任何地方使用“ruta”指针。我相信你应该对“ruta”进行一些处理,将其转换为路径或使用“ruta”而不是“path”。