C语言递归遍历目录时如何输出带基路径的完整单文件路径
问题根因
你当前代码的逻辑完全偏离了需求——你没有实现基础路径和目录下文件名的拼接操作,反而把静态基础路径按斜杠拆分得到的路径片段(home、bilal等)直接存入了token数组,所以无论遍历到哪个文件,打印token元素时只会输出固定的拆分片段,和实际遍历的文件没有关联。
正确实现步骤
- 先定义不可修改的基础路径常量,全程不对这个基础路径做拆分处理:
const char *base_path = "/home/bilal/Videos/folder1"; - 调用
opendir打开目标目录后,逐条目读取目录内容,主动过滤掉.和..两个系统特殊目录项。 - 每读到一个有效文件名时,计算拼接所需的内存总长度:基础路径长度 + 路径分隔符
/的长度 + 文件名长度 + 字符串结束符\0的长度,按这个长度分配堆内存。 - 用
snprintf完成路径拼接,将生成的完整路径(基础路径+斜杠+文件名)存入对应token数组位置:读到
fileOne时生成完整路径/home/bilal/Videos/folder1/fileOne,存入token[0];
读到fileTwo时生成完整路径/home/bilal/Videos/folder1/fileTwo,存入token[1]。
避坑要点
- 不要直接将拆分基础路径得到的临时字符串指针赋值给token元素:这类临时字符串存储在栈空间,函数执行出栈后内存会被回收,后续读取时会触发野指针访问。
- 拼接路径时不要遗漏基础路径和文件名之间的分隔斜杠,否则会生成拼接错误的无效路径。
- 程序退出前要释放所有为拼接路径分配的堆内存,避免内存泄漏。
内容的提问来源于stack exchange,提问作者Sky wifibrand
相关产品推荐
相关产品推荐

