如何将字符串拆分填充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_
相关产品推荐
相关产品推荐

