You need to enable JavaScript to run this app. C语言递归遍历目录时如何输出带基路径的完整单文件路径
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 12:15:04