Linux上C编程关于遍历的有关问题
Linux下C编程关于遍历的问题
为什么递归调用dir_scan这个函数的时候加了一个@;譬如你命令行参数输入一个路径ab,第一次是调用是好的,递归调用的时候就给路径加了@,就变成@ab/abc.求指导
void dir_scan(char* path)
{
struct stat s;
DIR *dir;
struct dirent *dt;
char dirname[1024];
lstat(path, &s);
strcpy(dirname + strlen(dirname), path);
if (S_ISDIR(s.st_mode))
{
dir = opendir(dirname);
while ((dt = readdir(dir)) != NULL)
{
if (dt->d_name[0] == '.')
{
continue;
}
printf("%s\n",dirname);
snprintf( dirname, 1024,"%s/%s", path, dt->d_name );
printf("%s\n",path);
printf("%s\n",dirname);
dir_scan(dirname);
}
closedir(dir);
}else{
printf("%s\n",dirname);
}
}
int main(int argc,char* argv[])
{
char* path = argv[1];
dir_scan(path);
}
------解决方案--------------------
char dirname[1024];
lstat(path, &s);
strcpy(dirname + strlen(dirname), path);
感觉dirname都没初始化
------解决方案--------------------
楼主为什么不贴上完整的代码,后面人看的时候直接执行一下,会更清晰。
------解决方案--------------------
+1
------解决方案--------------------
dirname没有初始化。
strcpy(dirname + strlen(dirname), path);这句在干嘛?
为什么递归调用dir_scan这个函数的时候加了一个@;譬如你命令行参数输入一个路径ab,第一次是调用是好的,递归调用的时候就给路径加了@,就变成@ab/abc.求指导
void dir_scan(char* path)
{
struct stat s;
DIR *dir;
struct dirent *dt;
char dirname[1024];
lstat(path, &s);
strcpy(dirname + strlen(dirname), path);
if (S_ISDIR(s.st_mode))
{
dir = opendir(dirname);
while ((dt = readdir(dir)) != NULL)
{
if (dt->d_name[0] == '.')
{
continue;
}
printf("%s\n",dirname);
snprintf( dirname, 1024,"%s/%s", path, dt->d_name );
printf("%s\n",path);
printf("%s\n",dirname);
dir_scan(dirname);
}
closedir(dir);
}else{
printf("%s\n",dirname);
}
}
int main(int argc,char* argv[])
{
char* path = argv[1];
dir_scan(path);
}
------解决方案--------------------
char dirname[1024];
lstat(path, &s);
strcpy(dirname + strlen(dirname), path);
感觉dirname都没初始化
------解决方案--------------------
楼主为什么不贴上完整的代码,后面人看的时候直接执行一下,会更清晰。
------解决方案--------------------
+1
------解决方案--------------------
dirname没有初始化。
strcpy(dirname + strlen(dirname), path);这句在干嘛?