尝试取消链接文件时编译c ++错误

时间:2016-02-18 16:20:48

标签: c++ unlink

我正在使用我在stackoverflow上找到的代码..这似乎对我的要求很有效。

#include <stdio.h>
#include <iostream>
#include <string>
#include <map>
#include <conio.h>

int main () {

    std::map< std::string, std::string > MyMap;
    std::map< std::string, std::string >::iterator MyIterMap; 

       MyMap["Teste1"] = "map1";
       MyMap["Teste2"] = "map2";
       MyMap["Teste3"] = "map3";

   MyIterMap = MyMap.begin(); 

   while(MyIterMap != MyMap.end() ) {
       std::string key = (*MyIterMap).first; 

       std::cout << "Key: " << key << ", Value: " << MyMap[key] <<std::endl;
       MyIterMap++;
   }
   _getch();
   return 0;

}

在每次循环之后,在MyInterMap++之前我试图根据key的值取消文件链接作为文件名。例如:

unlink ("/tmp/" + key);

当我尝试编曲时,我得到:

In function ‘int main()’:

error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘const char*’ for argument ‘1’ to ‘int unlink(const char*)’

有人可以建议我这样做吗?

谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

您需要将指向C字符串的指针传递给unlink函数:

const std::string filename = "/tmp/" + key;
unlink(filename.c_str());

在这种情况下可能不是问题,因为unlink不太可能将C字符串指针存储在任何地方,但请注意,一旦变量filename变为指针,指针就会变为悬空状态超出范围。如果将指针传递给从std::string获得的C字符串,请确保在std::string被销毁后不会使用该指针。

答案 1 :(得分:0)

我已经使用

解决了这个问题

unlink( ("/tmp/" + key).c_str() ) ;

由于