繁体   English   中英

如何将 QString 转换为字符**

[英]how to convert QString to char**

我想从我的 Qt 应用程序调用外部程序。 这需要我为外部命令准备一些参数。 这就像从终端调用另一个进程一样。 例如:

app -w=5 -h=6

为了测试这一点,我有一个简单的函数,如:

void doStuff(int argc, char** argv){ /* parse arguments */};

我尝试准备一组这样的参数:

QString command;
command.append(QString("-w=%1 -h=%2 -s=%3 ")
               .arg("6").arg("16").arg(0.25));
command.append("-o=test.yml -op -oe");
std::string s = command.toUtf8().toStdString();
char cstr[s.size() + 1];
char* ptr = &cstr[0];

std::copy(s.begin(), s.end(), cstr);
cstr[s.size()] = '\0';

然后我调用该函数:

doStuff(7, &cstr);

但是我在 debuggre 和我的解析器中得到了错误的参数(已损坏)(opencv CommandLineParser崩溃了!

在此处输入图片说明

你能告诉我我做错了什么吗?

doStuff需要一个字符串数组而不是单个字符串。

这样的事情应该工作:

std::vector<std::string> command;
command.push_back(QString("-w=%1").arg("6").toUtf8().toStdString());
command.push_back(QString("-h=%2").arg("16").toUtf8().toStdString());
command.push_back(QString("-s=%3").arg("0.25").toUtf8().toStdString());
command.push_back("-o=test.yml");
command.push_back("-op");
command.push_back("-oe");
std::vector<char*> cstr;
std::transform(command.begin(), command.end(), std::back_inserter(cstr),[](std::string& s){return s.data();});
doStuff(cstr.size(), cstr.data());

因为您需要将空格分隔的字符串拆分为参数的单个字符串。

argv 指向一个字符串数组- 你最终需要的是类似的东西

argv[0] -> "-w=6"
argv[1] -> "-h=16"
...
argv[7] -> 0

将字符串写入您的 char 数组不会实现,因为那只是将 cstr 视为字符数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM