<vector>



  • folgendes Programm funktioniert nicht wie es soll:

    #define  _WIN32_WINNT  0x0501
    
    #include <windows.h>
    #include <string.h>
    #include <iostream>
    #include <stdio.h>
    #include <tchar.h>
    #include <stdlib.h>
    #include <vector>
    
    using namespace std;
    
    int main(void)
    {
    	WIN32_FIND_DATA finddata;
    	HANDLE hand;
    	_TCHAR dirname[]=_T("f:\\TEMP\\*.*");
    	int i=0;	
    
    	DWORD dw=GetLastError();
    	vector<wchar_t*> t;
    
    	hand=FindFirstFile(dirname,&finddata);
    
    	if (hand==INVALID_HANDLE_VALUE)
    	{
    	printf("Hier geht nix!\n");
    	return(-1);
    	}
    	else
    	{
    		wprintf(_T("%s\n"),finddata.cFileName);
    
    		while (FindNextFile(hand,&finddata) !=0)	
    		{		
    			if (finddata.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY){
    			//wenn Verzeichnis				
    			}
    			else	
    			{
    			//wenn Datei				
    				t.push_back(finddata.cFileName);					
    			}	
    		}
    	FindClose(hand);
    	}			
    return (0);
    }
    

    Fehlerbeschreibung: Der Vektor t ändert sich in seiner Länge, aber es werden immer alle Felder mit dem aktuell gefundenen Dateinamen überschrieben.(siehe Abb.)
    http://www.l8e.de/abb.png

    Gruß
    Daniel



  • Ja das ist normal so. Du speicherst immer den selben pointer in deinem vector.
    Also speicher anfordern, kopieren und dann erst in den vektor.
    Kurt



  • ok, ich dachte das macht push_back für mich.

    Gruß
    Daniel



  • DanielN schrieb:

    ok, ich dachte das macht push_back für mich.

    Nein, push_back kopiert nur den Wert, den du ihm übergibst - in deinem Fall den Inhalt des Pointers (Adresse). Wenn du etwas anderes haben willst, benötigst du intelligentere Objekte (die sich beim Kopieren um eigenen Speicherplatz bemühen).

    (für dein Beispiel empfehle ich einen vector<wstring> statt des vector<wchar_t*>)


Anmelden zum Antworten