Salve a tutti ragazzi, oggi per la prima volta dopo due anni sto avendo problemi con i puntatori.
Diciamo che è la prima volta che mi compare un inghippo del genere.
codice:
std::string Report::WSAGetLastError()
{
int iError = ::WSAGetLastError();
LPSTR buffer = NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0,iError,LANG_USER_DEFAULT,(LPSTR)&buffer,0,NULL);
std::string error = buffer;
return error;
}
Il codice funziona, mentre se invece di passare come paramentro (LPSTR)&buffer, passo solamente buffer, oppure &*buffer, non va!
Spiego il mio ragionamento:
LPSTR è un char *, quindi se passo un char * lui dovrebbe riuscire ad allocarci memoria, perchè gli passo l'indirizzo del puntatore, eppure non è così.
Se invece passassi &*buffer, dovrebbe andare perchè passo l'indirizzo del char a cui punta il puntatore, ma non è così!
Invece se passo &buffer, che in realtà non è un char * ma un char **!!!! e lo casto a char * funziona! non capisco minimamente il senso di questo comportamento, perfavore aiutatemi voi