problem mit einem vector...*verzweifel*



  • nachdem ich mir ewig der schädel zermartert habe, entschloss ich mich euch doch zu nerven mit meinem prob (mir fällt nix mehr ein c-noob)

    problem:
    ich hab einen ordner mit ein paar tausend bildern, durch diesen ordner gehe ich mit findfirstfile/findnextfile und bekomme dateinamen. Diese sollten unsortiert/gemischt in eine textdatei ausgegeben werden.

    lösungsversuch:
    mit findfirstfile/findnextfile und bekomme dateinamen
    pack sie namen in einen vector, mische mit random_shuffle
    schreib die vectordaten in eine datei

    ich hab
    "vector<char> v(counter);"
    ...später...
    v.at(count) = wfd2.cFileName; ((wfd2.cFileName ist vom typ char[260]))

    bei vector<char> v(counter); gibts fehler: cannot convert from 'char [260]' to 'char'
    bei vector<char[260]> v(counter); gibts fehler: cannot convert from 'int' to 'char [260]'
    bei vector<char*> v(counter); gibts keine fehler aber in allen feldern steht das selbe drin

    2. versuch

    Also ich habs mal mit vector<string> getestet... das bringt aber mein restliches programm total durcheinander....

    3. versuch mit einem char array

    int counter = 0;
    ---counter wird hochgezählt---
    char vec[counter][260]; //statt vector
    vec[count] = wfd2.cFileName;

    aber fehler.... 😢
    error C2057: expected constant expression
    error C2466: cannot allocate an array of constant size 0
    error C2133: 'vec' : unknown size
    error C2106: '=' : left operand must be l-value

    langsam geht mir mein c aus bzw meine ideen....

    danke für jedes Posting 😉

    tomk



  • Hallo,
    das ein vector<char> nicht funktioniert sollte klar sein. Ein char ist ein einzelnes Zeichen und kann damit natürlich keinen ganzen String speichern.

    2. versuch

    Also ich habs mal mit vector<string> getestet... das bringt aber mein restliches programm total durcheinander....

    Das ist ein guter Weg. Inwiefern hat das dein restliches Programm durcheinander gebracht? Du weißt, dass du von std::string nach const char* durch den Aufruf von std::string::c_str() kommen kannst, richtig?



  • HumeSikkins schrieb:

    Das ist ein guter Weg. Inwiefern hat das dein restliches Programm durcheinander gebracht? Du weißt, dass du von std::string nach const char* durch den Aufruf von std::string::c_str() kommen kannst, richtig?

    danke für die fix antwort... das mit std::string::c_str() wusst ich noch nicht.. wie gesagt c-noob 😉

    ich werd mal sehen was ich damit anfangen kann

    hier ist noch ein bissel code aus der entsprechenen stelle

    vector<string> v(counter);
    int count = 0;
    f2Handle=FindFirstFile(temp,&wfd2);
    do
    	{
    	if (!( (wfd2.cFileName[0]=='.') && ( (wfd2.cFileName[1]=='.' && wfd2.cFileName[2]==0) || wfd2.cFileName[1]==0 ) ))
    		{
    		if (wfd2.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    			{}
    		else
    			{
    			v.at(count) = wfd2.cFileName;
    			count++;
    			printf("%s\n",wfd2.cFileName);
    			}
    		}
    	}
    	while (FindNextFile(f2Handle,&wfd2));
    	FindClose(f2Handle);
    
    	printf("%s\n",v.at(0)); // geht nicht mehr
    	printf("%s\n",v.at(counter-1)); // auch nicht
    	random_shuffle(v.at(0),v.at(counter-1)); // sowieso nicht
    


  • printf("%s\n",v.at(0)); // geht nicht mehr

    Korrekt:

    printf("%s\n",v.at(0).c_str());
    

    oder

    cout << v.at(0) << "\n";
    

    printf("%s\n",v.at(counter-1)); // auch nicht

    siehe oben.

    random_shuffle(v.at(0),v.at(counter-1)); // sowieso nicht

    Richtig:

    random_shuffle(v.begin(),v.end());
    


  • printf("%s\n",v.at(0).c_str()); // geht nicht mehr
    printf("%s\n",v.at(counter-1).c_str()); // auch nicht
    

    Na, was ist wohl in deinem Vector drin? Genau std::string!



  • DANKE!!!!!!!! es funzt jetzt...


Anmelden zum Antworten