我有2个带文件名的列表。
std::list<std::string> userfontlist;
std::list<std::string>::iterator it;
std::list<std::string> CAATfontlist;
std::list<std::string>::iterator it2;
std::list<std::string> doesnthavelist;
我希望比较2个列表,并删除它匹配的值。在我将“del / F / Q / A”添加到y.c_string()之前,每个似乎都没有问题。
for (it = userfontlist.begin(); it !=userfontlist.end(); ++it){
for(it2 = CAATfontlist.begin();it2 !=CAATfontlist.end();++it2){
if(*it==*it2){
string y = *it;
string k = y.c_str();
string a = "del /F /Q /A " + k;
system(a);
}
}
}
system(a)我说“没有合适的转换函数从std字符串到const char *存在”。如果我把整个东西作为1个字符串它可以工作,但不是当我连接字符串和y.c_str()时。我没有运气试图将std :: string转换为const * char,甚至不确定这是否有帮助。
答案 0 :(得分:1)
正如它所说的那样,没有system()
的版本理解std::string
而std::string
无法自由转换为const char *
(system()
理解),因为std::string
可能会以一般情况下没有意义的方式消失。
您可以明确地轻松地从std::string
转换为const char *
,但是:使用std::string::c_str
,将您的最后一行写为
system(a.c_str());
请注意,返回的const char *
生命周期与它来自的string
相关联,一旦超出范围,指针就会变为无效。但是,这种情况是使用它的好时机,因为system()
不会“保持”指针超过它自己的返回。