用字符串填充argv(并获取argc)以传递给其他方法[重复]

Posted

技术标签:

【中文标题】用字符串填充argv(并获取argc)以传递给其他方法[重复]【英文标题】:Fill argv (and get argc) with a string to pass to other method [duplicate] 【发布时间】:2021-12-09 10:57:18 【问题描述】:

我从另一个方法收到string(我不知道它的大小),我想用这个string 填充我的argv(并得到argc)以传递给其他方法和我不知道该怎么做。

string 的开头,我设置了我的应用程序的名称,所以我有一个最终的string,例如:

"myapp arg1 arg2 arg3 arg4"

我的代码如下:

int main (int argc, const char* argv[])


    while(true)
    

        // send_string() give a string like: “the_name_of_my_app arg1 arg2 arg3 arg4”
        std::string data = send_string(); 

        argv = data;
        argc = number_of_element_on_data;

        other_function(argc, argv);
    
    return 0;

【问题讨论】:

您可以使用任何intchar* [] 变量调用other_function,您不必(也可能不应该)覆盖argcargv argcargv 应被视为只读。它们不属于你。声明您自己的 intchar* [] 变量并将您的内容放在那里,然后将它们传递给 other_function 【参考方案1】:

试试这样的:

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

int main (int argc, const char* argv[])

    while (true)
    
        // send_string() give a string like: “the_name_of_my_app arg1 arg2 arg3 arg4”
        std::string data = send_string(); 

        std::istringstream iss(data);
        std::string token;

        std::vector<std::string> args;
        while (iss >> token)
            args.push_back(token);

        std::vector<const char*> ptrs(args.size()+1);
        for(size_t i = 0; i < args.size(); ++i)
            ptrs[i] = args[i].c_str();
        ptrs[args.size()] = NULL;

        other_function(args.size(), ptrs.data());
    
    return 0;

【讨论】:

以上是关于用字符串填充argv(并获取argc)以传递给其他方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用argv

将argv和argc传递给线程

argc 和 argv 用于除 main 以外的函数

main中的argv和argc

UNIX环境高级编程 | 7函数signal

在代码中创建 argc argv [重复]