从地图访问,将字符串转换为char *

时间:2012-12-27 21:59:41

标签: c++ map casting

我在转换时遇到以下问题(或访问数据,我不确定):

我用map<int, string> keys来描述按钮,数字与Allegro5密钥代码匹配(例如keys[81] = "PgDown")。我想使用al_draw_text在屏幕上打印数据,这需要传递char*参数。

我尝试以这种方式访问​​数据:

char dropdownBuffer[16];
cout << keys[dropdownKeyCode] << endl;
sprintf_s(dropdownBuffer, "%s", keys[dropdownKeyCode]);
cout << dropdownBuffer << endl;
gui.drawButton(CLIENT_PADDING, CLIENT_PADDING+50+219, 123, 38, dropdownBuffer);

控制台应该打印字符串Spacja两次,但第二次有一些随机字符。

我现在做错了什么?也许有其他可能的方法将此字符串转换为char?

2 个答案:

答案 0 :(得分:3)

从字符串获取指向数据的指针,使用c_str(),参见ref:this

替换代码:

sprintf_s(dropdownBuffer, "%s", keys[dropdownKeyCode]);

使用:

sprintf_s(dropdownBuffer, "%s", keys[dropdownKeyCode].c_str());

答案 1 :(得分:0)

我认为sprintf_s需要一个sizeof参数。

sprintf_s(dropdownBuffer, sizeof(dropdownBuffer), "%s", keys[dropdownKeyCode]);

const char* dropdownBuffer = keys[dropdownKeyCode].c_str();