Я новичок в C++, я нахожусь в проекте проверки чека, и я использую API, который был снабжен сканером. Вот мой код:вектор указателя массива C++
.h файл:
#include <iostream>
#include<Windows.h>
#include<vector>
using namespace std;
class Excella
{
public:
vector<char*> getDevicesName();
};
.cpp файл:
vector<char*> Excella::getDevicesName()
{
DWORD dwResult;
vector<char*> listeDevices;
char pcDevName[128]="";
int i = 6;
// the device's name is stored in the variable 'pcDevName'
while ((dwResult = MTMICRGetDevice(i, (char*)pcDevName)) != MICR_ST_DEVICE_NOT_FOUND) {
dwResult = MTMICRGetDevice(i, (char*)pcDevName);
i++;
listeDevices.push_back((char*) pcDevName);
}
return listeDevices;
}
main.cpp
vector<char*> liste = excella.getDevicesName();
if (liste.empty()!= true)
{
for (vector<char*>::iterator IterateurListe = liste.begin(); IterateurListe != liste.end(); ++IterateurListe)
{ string str(*IterateurListe);
auto managed = gcnew String(str.c_str());
devices->Items->Add(managed);
}
}
else {
MessageBox::Show("The vector is empty");
}
Проблема заключается в том, что я могу получить правильное устройство номер .. у меня просто есть странные персонажи.
Благодарим вас за помощь.
Можете ли вы дать немного больше деталей? Какие странные персонажи вы получаете? – swinefish
Для одного 'pcDevName' уже есть' char * ', поэтому избавьтесь от ненужного' char * 'cast. –
Для двоих вы никогда не проверяете результат 'dwResult', чтобы убедиться, что' 'MTMICRGetDevice' был успешным, прежде чем нажать' pcDevName' в вектор; если это не удастся, это объяснит, почему вы видите неинициализированный мусор. –