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

C++程序接收命令行参数执行ls命令报错的原因及修复方法

错误成因
  • C++ 中const char*类型的C风格字符串不支持直接用+运算符拼接。代码中"ls" + argv[1]实际执行的是指针算术运算:将字符串字面量"ls"的首地址,加上argv[1]指针存储的地址偏移量,最终得到的是完全非法的内存地址,并非预期的拼接后的命令字符串,传入system函数后自然会执行失败。
  • 即使拼接逻辑正确,代码也缺少了ls命令和参数之间的空格,直接拼接会得到lstest这类无法被系统识别的错误命令。
修复方案

使用C++标准库的std::string完成字符串拼接,同时补充参数合法性校验即可,修改后的代码如下:

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main(int argc, char* argv[]){
    // 校验入参是否存在
    if (argc < 2) {
        cout << "请传入要查看的目录名" << endl;
        return 1;
    }
    // 用std::string完成拼接,注意ls后添加空格
    string command = string("ls ") + argv[1];
    system(command.c_str());
    return 0;
}

如果需要适配带空格、特殊字符的目录参数,还需要额外对参数做转义处理,避免出现命令注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:30:02