0

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

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两次,但第二次有一些随机字符。

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

4

2 回答 2

3

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

替换代码:

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

和:

sprintf_s(dropdownBuffer, "%s", keys[dropdownKeyCode].c_str());
于 2012-12-27T22:01:09.027 回答
0

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

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

或者

const char* dropdownBuffer = keys[dropdownKeyCode].c_str();
于 2012-12-27T22:16:36.703 回答