我有 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;
我想比较这两个列表,并删除它匹配的值。在我将“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,甚至不确定这是否有帮助。
最佳答案
正如它所说,没有任何版本的 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()
不会“保持”指针超过它自己的返回值。
关于c++ - System() 没有合适的转换 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22901622/