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

如何将字符串拆分填充argv并计算argc传递给其他函数

实现方案

你当前的写法存在类型不匹配的问题:argv 是 const char** 类型(指向char指针数组的指针),无法直接赋值为 std::string 类型,需要先把字符串按空格拆分,再构造符合要求的参数数组。

实现逻辑如下:

  • 第一步:把获取到的std::string按空格分割为独立的参数片段,存储到std::vector<std::string>中管理生命周期,避免后续指针悬空
  • 第二步:把每个参数片段的c_str()指针存入另一个std::vector<const char*>,这个vector的首地址就可以作为argv传入,vector的长度就是argc

完整示例代码:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

// 请根据你实际的函数签名调整此处
void other_function(int argc, const char* argv[]) {
    for (int i = 0; i < argc; i++) {
        std::cout << "第" << i << "个参数:" << argv[i] << std::endl;
    }
}

// 模拟你获取字符串的接口
std::string send_string() {
    return "the_name_of_my_app arg1 arg2 arg3 arg4";
}

int main (int argc, const char* argv[])
{
    while(true)
    {
        std::string data = send_string();
        std::vector<std::string> args_vec;
        std::stringstream ss(data);
        std::string arg;
        
        // 按空格拆分字符串
        while (ss >> arg) {
            args_vec.push_back(arg);
        }
        
        // 构造符合要求的argv指针数组
        std::vector<const char*> argv_ptr;
        for (auto& s : args_vec) {
            argv_ptr.push_back(s.c_str());
        }
        
        int custom_argc = argv_ptr.size();
        const char** custom_argv = argv_ptr.data();
        
        // 调用目标函数
        other_function(custom_argc, custom_argv);
        
        // 此处请自行添加循环退出条件,避免无限执行
        break;
    }
    return 0;
}

如果你的参数里包含被引号包裹的带空格内容(比如myapp "arg with space" arg2),上面的stringstream默认拆分逻辑不适用,需要自行实现带引号识别的拆分规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:39:03