我在转换时遇到以下问题(或访问数据,我不确定):
我用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?
答案 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();