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

C语言使用dirent.h修改文件名时路径与文件名间出现异常符号

问题原因

  • malloc申请的内存空间是未初始化的,内存中残留的是随机的垃圾数据。
  • strcat函数的逻辑是先在目标字符串中查找结束符\0,再从\0的位置开始追加内容。你直接对刚申请的fn调用strcat(fn, d_name),会从垃圾数据中随机找第一个\0的位置开始写内容,\0前面的垃圾数据就会保留在fn开头,最终拼接到路径中就出现了异常符号。第一次循环正常大概率是巧合,刚好申请到的内存第一个字节是\0,后续循环申请到的内存残留了之前的数据就出现问题。

修复方案

你可以任选以下任意一种方案修复:

  1. 把第一次拼接改成字符串拷贝
    把strcat(fn, d_name);替换为strcpy(fn, d_name);,因为fn是新分配的空缓冲区,首次写入直接用拷贝即可,不需要追加。
  2. 初始化分配的内存
    可以在malloc后加一行memset(fn, 0, 400 * sizeof(char));,或者直接把malloc换成calloc(400, sizeof(char)),calloc会自动把申请的内存全部初始化为0,保证strcat能从开头正确追加。
  3. 更简单的优化:无需动态分配内存
    因为entry->d_name的最大长度是系统定义的NAME_MAX,直接在栈上开固定长度的缓冲区即可,不需要手动管理内存:
// 替换原来的malloc和strcat逻辑
char fn[NAME_MAX + 5]; // +5是留给后缀.enc和结束符
sprintf(fn, "%s.enc", d_name);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:15:06