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

使用find命令仅显示文件权限的C代码报错求助

解决C代码中调用find命令显示文件权限的格式警告问题

问题根源

出现unknown conversion type character ‘M’ in format警告的核心原因是:snprintf会将字符串中的%识别为格式占位符的起始标记,试图解析%M为自身支持的格式转换符,但snprintf并不支持M这个转换类型,因此触发报错。我们需要让%M原封不动传递给find命令,而非被snprintf解析。

修正后的代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char** argv) {
    if (argc < 2) {
        fprintf(stderr, "请传入文件大小限制参数\n");
        return 1;
    }
    int file_size_limit = atoi(argv[1]);

    char buf[BUFSIZ];
    // 用%%M转义%,让snprintf输出实际的%M;添加\n让每个权限单独一行,提升可读性
    snprintf(buf, sizeof(buf), "find . -size +%dc -printf \"%%M\\n\"", file_size_limit);
    system(buf);

    return 0;
}

关键说明

  • 转义%符号:在snprintf的格式字符串中,要输出一个普通的%必须写成%%,这样snprintf处理后会将%%M转换为%M,正确传递给find命令作为-printf的格式参数。
  • 优化输出格式:在-printf的参数里添加\n(C字符串中需写为\\n),让每个文件的权限单独占一行,避免所有权限挤在一起难以阅读。
  • 增加参数校验:补充了参数数量检查,避免用户未传参时atoi处理空指针引发的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:00:34