LPCSTR Array gibt Datenmüll aus

blaschkeks

Grünschnabel
Tach,
ich habe folgendes Problem:
Iich möchte LPCSTR strings in einem Array speichern. Leider bekomm' ich beim Wiederauslesen nur Müll zurück:
Code:
LPCSTR lpszPartitions[255];
unsigned short PartitionIndex;

void WINAPI FoundPartitionCallback(LPCSTR lpszName; LPVOID lpContext) {
    lpszPartitions[PartitionIndex++]=lpszName;
}
LPCSTR getPartitionName(unsigned short index) {
    return lpszPartitions[index];
}

In der ersten funktion hab' ich mir mal den Namen mit MessageBox ausgeben lassen -
da war noch alles ok - aber als ich die zweite Funktion zum Auslesen aufgerufen hab'
hab' ich nur noch Müll zurückbekommen. :eek:
Muss ich irgend einen anderen Stringtyp nehmen, damit das funktioniert? Wenn ja, wie
kann ich den später wieder in 'nen LPCSTR zurückverwandeln?

Danke schonmal für eure Antworten
Ciao
Tobias
 
Wwundert mich auch nicht, du kannst doch nicht nen Pointer auf nen String der im System nur temporär existiert abspeichern und später benutzen...

Code:
LPCSTR lpszPartitions[255];
unsigned short PartitionIndex = 0;

void WINAPI FoundPartitionCallback(LPCSTR lpszName; LPVOID lpContext) {
    lpszPartitions[PartitionIndex++]=_strdup(lpszName);
}
LPCSTR getPartitionName(unsigned short index) {
    return lpszPartitions[index];
}

versuchs doch mal so ;-)
_strdup dupliziert den String und speichert ihn extra, bis du ihn explizit löscht..
das solltest du aber auf keinen Fall vergessen... du musst jeden auf diese Weise erhaltenen String mit free() wieder löschen um Speicherlecks zu vermeiden.

Des weiteren benutzen sich unitialisierte Variablen extrem gut ;-) wenn der Compiler nicht mitdenkt und die auf 0 initialisiert crasht dein Programm beim ersten Zugriff.

Sollte er _strdup net finden.. ich glaube das is in string.h drin... kann aber auch malloc.h sein, bin mir net ganz sicher.
 
Danke

Danke für die hilfe !
jetzt wo du's gesagt hast wurd mir auch klar, was der Compiler macht :) :
er setzt einfach die Variable auf die selbe Adresse

jedenfalls danke
:) :) :) :) :)
 
Zurück