Распечатывая карту, невозможно преобразовать константную строку в константный массив символов - PullRequest
1 голос
/ 11 декабря 2011

Мне нужно пройтись по карте и отправить функцию 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 ]

3 голосов
/ 11 декабря 2011

Вам необходимо использовать строковую функцию-член string :: c_str

it->first возвращает std::string не базовые символьные данные.Чтобы извлечь это, вам нужно использовать вышеуказанную функцию-член.

Вы должны использовать:

strcpy(initials,it->first.c_str());
2 голосов
/ 11 декабря 2011
strcpy(initials,it->first);  //error

Должно быть так:

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

Потому что first равно std::string.Вам нужно получить const char*, который std::string хранит, позвонив по номеру c_str().

Кстати, вы уверены, что максимальный размер строки будет 4, включая нулевой символ?Лучше использовать strncpy вместо strcpy как:

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

Третий аргумент - это количество символов, которые нужно скопировать из источника в место назначения.

2 голосов
/ 11 декабря 2011

Используйте c_str() член std::string.

DrawString(..., it->first.c_str(), ...);
1 голос
/ 11 декабря 2011

Вы должны преобразовать строку в символ. Попробуйте

it->first.c_str();
0 голосов
/ 11 декабря 2011
strcpy(initials,it->first);

измените его на

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

Но это может вызвать некоторые проблемы с безопасностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...