flighta Ответов: 3

Как перевести char в tchar в win32


Когда я пытаюсь скомпилировать ниже код под VS2012, не могу добиться успеха.
Сообщение об ошибке-идентификатор "LtmpStr" не определен, на последней строке.
int point_num;
TCHAR szText;
char tmpStr[] = {'\0'};
point_num = 100;
sprintf(tmpStr, "%d", point_num);
szText = _T(tmpStr);


Что я уже пробовал:

Я попробовал изменить szText на *szText, но все равно не могу работать.

Richard MacCutchan

_T () - это макрос, используемый для генерации строковых констант в ANSI или Unicode. Это не функция преобразования, поэтому она не будет работать с символьными переменными или массивами.

3 Ответов

Рейтинг:
2

Leo Chapiro

Посмотри: c++ - Как конвертировать char* в TCHAR[ ]? - переполнение стека[^]

Если вы включаете заголовочный файл:

#include "atlstr.h"

Then you can use the A2T macro as below:

// You'd need this line if using earlier versions of ATL/Visual Studio
// USES_CONVERSION;

char*  stheParameterFileName = argv[1];
TCHAR szName [512];
_tcscpy(szName, A2T(stheParameterFileName));
MessageBox(NULL, szName, szName, MB_OK);


flighta

Спасибо, но все равно работать не могу.

Рейтинг:
2

flighta

Наконец-то я нашел решение, спасибо всем!

TCHAR szText[10]; 
	char tmpStr[10] = {'\0'};
	int tmp_point_num = 10;
	sprintf(tmpStr, "%d", tmp_point_num);
	size_t newsize = strlen(tmpStr) + 1;

	wchar_t * wcstring = new wchar_t[newsize];

	size_t convertedChars = 0;
	mbstowcs_s(&convertedChars, wcstring, newsize, tmpStr, _TRUNCATE);


конечно, нам нужно включить

<pre>#include <string>

#include "atlbase.h"
#include "atlstr.h"
#include "comutil.h"


Рейтинг:
16

CPallini

Цитата:
char tmpStr[] = {'\0'};
point_num = 100;
sprintf(tmpStr, "%d", point_num);
Это путь к катастрофе: ваш буфер имеет длину 1 символ, sprintf перерасход его.

Используйте вместо этого C++ особенности, попробуйте, например:
std::basic_ostringstream<TCHAR> its;
its << point_num;
std::basic_string<TCHAR> ts = its.str();
MessageBox(NULL,ts.c_str(),_T("INFO"), MB_ICONINFORMATION);


flighta

Спасибо.
Я изменил код, как показано ниже, но теперь у меня есть 3 сообщения об ошибке.

код #include "файл stdafx.ч"
#включить "atlstr.h"

TCHAR szText[10];
char tmpStr[10] = {'\0'};
инт tmp_point_num = 10;
sprintf(tmpStr, "%d", tmp_point_num);
_tcscpy(szText, A2T(tmpStr));


сообщение об ошибке:
ошибка C2065: '_lpa': необъявленный идентификатор
ошибка C2065: '_convert': необъявленный идентификатор
ошибка C2065: '_acp': underclared identifier

Включаю ли я еще один файл .h???

CPallini

Вы должны указать
USES_CONVERSION
видеть
https://msdn.microsoft.com/en-us/library/87zae4a3.aspx
(посмотрите на нижнюю часть страницы)