Строка типа LPCSTR искажена или отображается ошибка

у меня есть LPCSTR что я хочу преобразовать в std::string или же char*,

LPCSTR strName;
_tprintf(_T("%s\n"), strName);

Я пытаюсь получить все аудиооборудование на компьютере и отображается, но чтобы получить LPCSTR тип прямого вывода искажен, используйте приведенный выше код для вывода правильных результатов.

Есть ли способ сохранить правильный вывод?

Ниже приведен полный код:

Add a dependency to the property:
comctl32.lib;winmm.lib;dsound.lib;dxguid.lib;odbc32.lib;odbccp32.lib

ListSoundDev.h

#ifndef _LISTSOUNDDEV_HEAD_
#define _LISTSOUNDDEV_HEAD_
#include<tchar.h>
#include <dshow.h>
#include<iostream>
#include<vector>
#include<mmsystem.h>
#include<mmreg.h>
#include<dsound.h>

#pragma comment(lib, "strmiids.lib")
#pragma comment(lib, "Quartz.lib")
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "dsound.lib")
#pragma comment(lib, "dxguid.lib")

#pragma comment(lib, "strmiids")
using namespace std;

typedef struct _DevItem
{
LPCSTR strName;
GUID guid;
} DevItem;
#endif

main.cpp

#include"ListSoundDev_head.h"std::vector<DevItem>    m_CapDevices;
BOOL CALLBACK DSEnumCallback(LPGUID lpGuid, LPCSTR lpcstrDescription, LPCSTR lpcstrModule, LPVOID lpContext)
{
std::vector<DevItem> *pLst = (std::vector<DevItem> *) lpContext;
if (pLst)
{
DevItem item;
memset(&item, 0, sizeof(item));
item.strName = lpcstrDescription;
if (lpGuid)
item.guid = *lpGuid;
else
item.guid = GUID_NULL;
pLst->push_back(item);
return TRUE;
}
return FALSE;
}
int main()
{
std::vector<DevItem>::iterator it;
HRESULT hr = S_OK;
setlocale(LC_ALL, "chs");
hr = DirectSoundCaptureEnumerate((LPDSENUMCALLBACKW)DSEnumCallback, (LPVOID)&m_CapDevices);
for (it = m_CapDevices.begin(); it != m_CapDevices.end(); it++){
_tprintf(_T("%s\n"), it->strName);//output correct
printf("%s\n",it->strName);//output error
std::cout << it->strName << std::endl;//output error
}
}

Ожидаемый результат:

Real (Realtek High Definition Au

Фактический вывод:

KQ 螛

Ожидаемый результат:

Realtek Цифровой вход (Realtek

Фактический вывод:

р

Как я могу это printf() или же std::cout можно напрямую выводить правильные результаты?

-2

Решение

Большое спасибо за ваш ответ, я решил эту проблему.

Решение состоит в том, чтобы использовать следующий код для преобразования.

Набор символов — Unicode.

char newStr[100];
wcstombs(newStr, (wchar_t*)it->strName, 100);
printf("newStr=%s\n", newStr);

Набор символов многобайтовый

printf("%s\n", it->strName);

Однако, когда я пишу эту программу в консоли C ++, чтобы получить имя аудиоустройства для микрофона (Realtek High Definition Au, но в MFC, используя этот код, чтобы получить имя устройства для микрофона (Realtek High Definition Audio) Какова причина?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]