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

Access from map, casting string to char*

本文关键字:转换 char 字符串 map 访问      更新时间:2023-10-16

我有以下问题与转换(或访问数据,我不确定):

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

I try access data this way:

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?

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

替换代码:

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

:

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

我认为sprintf_s需要一个sizeof参数

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

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