System()没有合适的转换C ++

时间:2014-04-07 00:11:36

标签: c++ system

我有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,甚至不确定这是否有帮助。

1 个答案:

答案 0 :(得分:1)

正如它所说的那样,没有system()的版本理解std::stringstd::string无法自由转换为const char *system()理解),因为std::string可能会以一般情况下没有意义的方式消失。

您可以明确地轻松地从std::string转换为const char *,但是:使用std::string::c_str,将您的最后一行写为

system(a.c_str());

请注意,返回的const char *生命周期与它来自的string相关联,一旦超出范围,指针就会变为无效。但是,这种情况是使用它的好时机,因为system()不会“保持”指针超过它自己的返回。