我正在尝试编写一个包含配置和密钥文件的程序。配置文件读取输入密钥文件的内容,根据需要解析并执行密钥值。
我收到一个错误:警告:无法通过'...'传递非POD类型'struct std :: string'的对象; call将在运行时中止。
我收到了这一行的错误:
snprintf(command, 256, "tar -xvzf %s %s", destination, source);
system(command);
更多尝试和更好解释的代码:
std::string source = cfg.getValueOfKey<std::string>("source");
std::string destination = cfg.getValueOfKey<std::string>("destination");
int duration = cfg.getValueOfKey<int>("duration");
int count, placeHolder, placeHolderAdvanced;
count = 1;
char command[256];
snprintf(command, 256, "tar -xvzf %s %s", destination, source);
system(command);
//Creates folder 1.
snprintf(command, 256, "mkdir %i", count);
system(command);
//Removes the last folder in the group.
snprintf(command, 256, "rm -rf %i", duration);
system(command);
关于我做错了什么,或者我应该在哪里寻找任何建议?
谢谢!
答案 0 :(得分:11)
snprintf
对std::string
一无所知。在这种情况下,它期望以null结尾的C字符串,即指向char
的指针,它是以空字符结尾的字符序列的开头。您可以通过std::string
方法获取c_str()
对象持有的基础空终止字符串:
snprintf(command, 256, "tar -xvzf %s %s", destination.c_str(), source.c_str());
答案 1 :(得分:5)
使用c_str()
成员函数。
snprintf(command, 256, "tar -xvzf %s %s", destination.c_str(), source.c_str());
这将返回一个指向数组的指针,该数组包含一个表示字符串对象当前值的C字符串。
答案 2 :(得分:1)
来吧!我们在21世纪,回到了顶峰:
#include <sstream>
...
stringstream command;
command << "tar -xvzf " << destination << " " << source;