Tablica wskaźników

0

Hi,
Napisałem algorytm, który wyszukuje pliki *.bmp w jednym z podfolderów Moje dokumenty;

[code]
#include <windows.h>
#include <stdio.h>
#include <shlobj.h>

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
char *list[50];
int i = 0;
char path[200];
LPITEMIDLIST pidl;
WIN32_FIND_DATA wfd;
HANDLE hFile = NULL;;
BOOL IsFile = TRUE;

SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl);
SHGetPathFromIDList(pidl, path);
strcat(path, "\\Szczecin - Wygaszacz ekranu");
SetCurrentDirectory(path);

if((hFile = FindFirstFile("*.bmp", &wfd)) != NULL)
{	
	while(IsFile)
	{
		GetFullPathName(wfd.cFileName, 199, path, NULL);
		list[i] = path
		IsFile = FindNextFile(hFile, &wfd);
		i++;

	}
}

return 0;

}

[/code]

Kiedy sprawdzam co jest w list okazuje się, że cała jest wypełniona ścieżką dostępu do ostatniego wyszukanego pliku. Po dłuuuuuuugim ;) namyśle doszedłem do wniosku, że przecież list jest wypełniana wskaźnikiem do path, który ciągle się zmienia! więc spróbowałem:
zamiast
[code]list[i] = path;[/code]
to
[code]strcpy(list[i], path);[/code]
ale to też nie działa - przy uruchamianiu wyskakuje błąd. Moźe macie pomysł na rozwiązanie tego problemu?

0

char *pom = new char[strlen(path)+1];
strcpy(pom, path);
list[i] = pom;

0
char **list=0;//=null, czy jak tam sobie wolisz
unsigned i=0; // nie wierzę, żeby było więcej niż 65535 plików, a jeśli to zmień na np. unsigned long;

char *pom = new char[strlen(path)+1];
strcpy(pom, path);
list=realloc(list,(i+1)*sizeof(char*)); // po realloc zwalnia się free(list) lub realloc(list,0);
list[i++]=pom; 

// tak albo po prostu wywalić jeszcze tą zmienną pomocniczą i robić bespośrednio na list[i].

list=realloc(list,(i+1)*sizeof(char*));
list[i++]=strdup(path); // po strdup - zwalnia się poprez free()/realloc()
0

list=realloc(list,(i+1)sizeof(char));

Poniewaz ma statyczna tablice to zakladam, ze tyle mu wystarczy, ale jezeli wolaby dynamiczna to powinien uzyc metody, jak podales, ale... z pewna zmiana.
Realokowanie pamieci przy kazdym elemencie to nie jest chyba zbyt efektywna metoda :/
Podobno najbardziej efektywna metoda realokacji pamieci (nie biorac pod uwage minimow, jakie system i tak alokuje) to zwiekszanie ilosci pamieci dwukrotnie za jednym razem (analogicznie zmniejszanie).

0

Dzięki wielkie
już działa :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1