Существует много вопросов, заданных этим вопросом, и столько ответов - ни одна из них не работает для меня и, кажется, многих других. Речь идет о широких CStrings и 8bit-символах под MFC. Мы все хотим получить ответ, который будет работать во всех случаях, а не в конкретном случае.Преобразование широкого CString в char *
void Dosomething(CString csFileName)
{
char cLocFileNamestr[1024];
char cIntFileNamestr[1024];
// Convert from whatever version of CString is supplied
// to an 8 bit char string
cIntFileNamestr = ConvertCStochar(csFileName);
sprintf_s(cLocFileNamestr, "%s_%s", cIntFileNamestr, "pling.txt");
m_KFile = fopen(LocFileNamestr, "wt");
}
Это дополнение к существующему коду (кем-то другим) для отладки. Я не хочу менять подпись функции, она используется во многих местах. Я не могу изменить подпись sprintf_s, это библиотечная функция.
В какой кодировке вы хотите использовать свою строку стиля C и что вы хотите делать с символами, которые в ней не представлены? – Wintermute
В MFC нет восьмибитных символов или Windows. Это [MBCS] (https://msdn.microsoft.com/en-us/library/cwe8bzh0.aspx) символы, которые интерпретируются на основе определенной [кодовой страницы] (http://en.wikipedia.org/ вики/code_page). Символы - вообще - не могут быть правильно интерпретированы, если вы не укажете его кодировку. Какая кодировка должна содержать вашу целевую строку? Как насчет не представимых символов? И почему вы просто не вызываете [swprintf_s] (https://msdn.microsoft.com/en-us/library/ce3zzk1k.aspx)? – IInspectable
Возможный дубликат [Convert CString to const char \ *] (http://stackoverflow.com/questions/859304/convert-cstring-to-const-char) – IInspectable