You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言目录树打印程序最后一个文件夹内文件无法排序问题求助

问题原因

  1. 全局数组folder仅存储了所有目录项在word数组中的下标,未设置排序终止边界:folder属于静态存储的全局数组,未手动赋值的元素默认初始化为0。当处理完最后一个目录项后,变量c指向folder中未赋值的位置,此时内层排序循环的终止条件j < folder[c]等价于j < 0,直接跳过了最后一个目录下所有文件的排序逻辑,因此只有倒数第二个及之前的目录内文件能正常排序。
  2. 额外隐藏问题:根目录下的文件也会因为同样的边界缺失问题无法正常排序。

修复方法

只需要在printdir遍历完成后,手动给folder数组添加总条目数作为排序终止边界即可。
修改main函数中调用printdir后的代码,新增一行folder[e] = coun;:

int main(int argc, char* argv[])
{
    word = calloc(1000, sizeof(*word));
    printdir(".", 0);
    folder[e] = coun; // 新增这行,设置排序终止边界
    printf("now, print the words in the order.\n");
    int c = 0;
    int l = 0;
    // 后续原有代码保持不变

修复后效果

hw1目录下的文件会按字母序正常排列为:

  • factor.c
  • grep.c
  • monster.c
  • sort.c
  • uniq.c
    根目录下的文件也会同步完成排序。

内容的提问来源于stack exchange,提问作者Vearaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:39:04