2013-08-27 4 views
-1

Я хочу преобразовать TCHAR nameBuf[] в string.TCHAR [] конвертировать в String

TCHAR nameBuf[MAX_COMPUTERNAME_LENGTH + 2]; 

DWORD nameBufSize; 

nameBufSize = sizeof nameBuf - 1; 

GetComputerName(nameBuf, &nameBufSize); //store computer name into nameBuf 

_tprintf(_T("%s"), nameBuf); //print the computer name 
+3

Вы * * может использовать 'зЬй :: basic_string ', но почему бы просто не использовать широкие символы в первую очередь? – chris

+0

Здесь T всегда означает широкий? – doctorlove

+1

_T будет шириной только при определении _UNICODE_. –

ответ

0

Давайте сделаем вид чистым. См измененный код ниже:

WCHAR nameBuf[MAX_COMPUTERNAME_LENGTH + 2]; 

DWORD nameBufSize; 

nameBufSize = sizeof nameBuf - 1; 

GetComputerNameW(nameBuf, &nameBufSize); //store computer name into nameBuf 

wprintf_s(L"%s", nameBuf); //print the computer name 
+0

Тогда как сделать 'string NAME = nameBuf'? –

+0

'nameBufSize = sizeof nameBuf - 1'; должен быть 'nameBufSize = MAX_COMPUTERNAME_LENGTH + 1'. потому что размер должен быть в символах, а не в байтах. – john

+0

@Xynus, если вам нужно использовать строку, а не wstring, затем используйте эквиваленты «A» вместо «W». – Vivek

0

Если вы хотите использовать узкие символы (кажется, что вы делаете), то этот код

char nameBuf[MAX_COMPUTERNAME_LENGTH + 2]; 
DWORD nameBufSize; 
nameBufSize = sizeof nameBuf - 1; 
GetComputerNameA(nameBuf, &nameBufSize); //store computer name into nameBuf 
printf_s("%s", nameBuf); //print the computer name 
string NAME = nameBuf; 

Непроверенные код

Смежные вопросы