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

C语言中execvp传入合法输入却无法正常工作的问题排查

解决execvp调用ls时出现"invalid option -- ' '"的问题

我之前也踩过一模一样的坑!你遇到的问题根源其实特别直白:从文件读取的命令行内容末尾藏着换行符(newline),导致拆分后的最后一个参数被偷偷带上了这个不可见的字符。

问题分析

你生成的cmd数组看起来是{"ls", "-l", "-a", "-i", ...},但实际上最后一个参数-i后面还跟着一个换行符(\n),变成了"-i\n"。当execvp调用ls时,ls会把这个换行符当成选项的一部分,误以为你输入了带不可见字符的无效选项,所以抛出了ls: invalid option -- ' '的错误。而硬编码的数组里没有这个隐藏的换行符,自然能正常执行。

解决方案

只需要在拆分字符串之前,先把读取到的文件内容末尾的换行符去掉就行,这里给你两个简单的处理方式:

  • 如果你用fgets读取文件行,可以用strcspn快速截断换行符(还能顺带处理Windows下的\r):
    char buf[256];
    fgets(buf, sizeof(buf), fp);
    // 去掉换行符(包括\n和\r)
    buf[strcspn(buf, "\n\r")] = '\0';
    
  • 也可以手动遍历字符串,找到'\n'后替换为字符串结束符:
    char *newline = strchr(buf, '\n');
    if (newline != NULL) {
        *newline = '\0';
    }
    

处理完换行符后再拆分字符串生成cmd数组,execvp就能正常调用ls了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:53:37