如何获取C语言中wordexp(3)错误返回值的字符串表示?
获取wordexp(3)错误返回值的字符串表示
由于wordexp(3)没有提供标准的错误信息转换函数(类似strerror()或perror()),你需要手动创建错误码与对应描述字符串的映射。具体步骤如下:
对照你系统的
wordexp(3)手册,列出所有定义的错误常量,常见的包括:WRDE_BADCHAR:输入中包含非法字符(如换行符)WRDE_BADVAL:引用了未定义的shell变量WRDE_CMDSUB:不允许命令替换(设置了WRDE_NOCMD标志)WRDE_NOSPACE:扩展参数时内存不足WRDE_SYNTAX:输入存在shell语法错误(如引号不匹配)
编写一个自定义函数,通过
switch-case将错误码映射为可读字符串:
#include <wordexp.h> #include <stdio.h> const char* wordexp_strerror(int err) { switch (err) { case WRDE_BADCHAR: return "非法字符(如换行符)出现在输入中"; case WRDE_BADVAL: return "引用了未定义的Shell变量"; case WRDE_CMDSUB: return "不允许命令替换(已设置WRDE_NOCMD标志)"; case WRDE_NOSPACE: return "扩展参数时内存不足"; case WRDE_SYNTAX: return "输入存在Shell语法错误(如引号不匹配)"; // 若你的系统有额外错误码,在此添加对应分支 default: return "未知的wordexp错误"; } }
- 在代码中使用这个函数处理错误:
int main() { const char* user_input = "..."; // 用户提供的输入 wordexp_t exp_result; int ret = wordexp(user_input, &exp_result, 0); if (ret != 0) { fprintf(stderr, "路径扩展失败: %s\n", wordexp_strerror(ret)); wordfree(&exp_result); // 执行后续错误处理逻辑 return 1; } // 处理扩展后的结果 wordfree(&exp_result); return 0; }
注意:不同系统的wordexp(3)可能定义额外的错误码,比如部分系统有WRDE_RECURSION(递归扩展过深),请务必对照本地手册补充映射分支,确保覆盖所有可能的错误情况。
内容的提问来源于stack exchange,提问作者Newbyte
相关产品推荐
相关产品推荐

