打印出一张地图,无法将const字符串转换为const char数组

时间:2011-12-11 11:33:00

标签: c++ string map

我需要循环遍历地图,并将const char数组发送到函数进行打印,我尝试使用字符串cpy但结果是一样的,它不能将const字符串转换为char。我做错了什么?

std::map <std::string, int>::const_iterator end = scores.end();
std::map<std::string, int>::const_iterator it;
for (it = scores.begin(); it != end; ++it)
{
    char initials[4];
    strcpy(initials,it->first);
    //std::string s = "";
    DrawString(screen, widthscreen/2 - (14*16)/4, heightscreen/2, initials,charsetsmall, 8);

5 个答案:

答案 0 :(得分:3)

您需要使用字符串成员函数 string::c_str

it->first返回std::string非基础字符数据。要提取你需要使用上面的成员函数。

您应该使用:

strcpy(initials,it->first.c_str());

答案 1 :(得分:2)

使用std::string的{​​{3}}成员。

DrawString(..., it->first.c_str(), ...);

答案 2 :(得分:2)

strcpy(initials,it->first);  //error

应该是这样的:

strcpy(initials,it->first.c_str()); //ok

因为firststd::string。您需要通过调用const char*获取std::stringc_str()商店。

顺便问一下,你确定字符串的最大大小是4,包括空字符吗?最好使用strncpy代替strcpy

strncpy(initials,it->first.c_str(), 4); //better 

第三个参数是要从源复制到目标的字符数。

答案 3 :(得分:1)

你必须将字符串转换为char。试试

it->first.c_str();

答案 4 :(得分:0)

strcpy(initials,it->first);

将其更改为

strcpy(initials, it->first.c_str());

但这可能会产生一些安全问题。