我必须在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 :(得分:1)
我不确定“路径”的定义位置,但您没有在任何地方使用“ruta”指针。我相信你应该对“ruta”进行一些处理,将其转换为路径或使用“ruta”而不是“path”。
答案 1 :(得分:1)
tree
才能使用它或声明原型。tree
和main
需要返回类型。path
未定义且使用了ruta
。据推测,这些应该是一回事。stat
使用buf
dp
中的文件填充readdir
。特别奖励:nivel
是一个坏主意。将它作为参数并将根级别传递给0然后在每次调用子项时传递nivel+1
更合理。
此外,“它编译”没有说“它有效”,特别是在C中。