使用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
相关产品推荐
相关产品推荐

