char str[255] mit vectortest.push_back[str] in vector<std::string> speichern



  • Oh ja, schreibfehler 🙄
    danke euch 😃



  • Hm ich bins nochmal,

    wenn ich nun die Werte des vectors ausgeben will, wird mir 'NULL' wiedergegeben:

    vector<string> vector_test;
    char str[255];
    str[0] = '\0'  //hab ich vorhin noch vergessen, ei wusst ich davor auch noch nicht
    
    for(int i = 0; i<5;i++)
    {
    	printf(str, "%d  %c  %d  =  %d\n", x, c, y, x + y);
    	vector_test.push_back(str);
    }
    
    for(unsigned int i = 0; i < vector_test.size(); i++)
    {
    	printf("%s\n", vector_test[i]);
    }
    

    Ausgabe:

    NULL
    NULL
    NULL
    NULL
    

    Gruß



  • doppelPost sri:

    NULL steht drin weil ich

    str[0] = '\0';
    

    setze oder?

    Aber mache ich dies nicht, wird das ganze Array mit Sonderzeichen gefüllt
    und das möchte ich natürlich nicht.

    Soweit das richtig ist was ich sage, wisst ihr Alternativen?



  • Ich nehme an Du möchtest str formatieren. Dann musst Du auch sprintf nehmen.
    Nicht printf.

    Besser würdest Du allerdinsg std::cout nehmen.

    (Oder Boost Format bzw. Fast Format).

    Simon



  • Das Problem ist halt, dass meine char-Elemente, denen ich nicht direkt einen char zuweise, ein Sonderzeichen beinhalten.
    sobald ich den char[] dann ausgeben will wird mein Bildschirm, nach der geplanten Ausgabe, mit den ganzen Sonderzeichen zugespamt.

    also Beispiel:

    char test[5];
    
    test[0]='a';
    test[1])'b';
    
    for(int i = 0; i < sizeof(test); i++)
    {
       printf("%s\n", test[i]);
    }
    

    Ausgabe:

    a
    b
    Í
    Í
    Í
    

    mit cout kommen Fehlermeldungen; bin deshalb auf printf umgestiegen.

    error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::basic_string<_Elem,_Traits,_Ax>' akzeptiert (oder keine geeignete Konvertierung möglich)
    ...

    sprintf(str, "%d  %c  %d  =  %d\n", x, c, y, x + y);
    

    =gleiches Ergebnis



  • Du musst nach 'a' und 'b' dein String noch mit '\0' abschliessen.
    Sonst weiss printf nicht wie lange dein String ist.

    Edit
    Zeig mal deine Code mit den iostreams (std::cout). Das sollte alles gehen..

    Simon



  • //Meine #include's
    #include "stdafx.h"
    #include <iostream>
    #include "stdlib.h"
    #include "time.h"
    #include <vector>
    #include "conio.h"
    
    ...
    
    for(int i = 0; i<Eingabe;i++)
    {
    sprintf(str, "%d  %c  %d  =  %d", fst, ze, sec, fst - sec);
    
    string test = str;          //der String-Inhalt stimmt hier!!
    vector_test.push_back(test);       
    }
    
    cout << "Inhalt anzeigen?(Y|N)" << endl;
    
    char c = _getch();
    if(  c == 'y' || c == 'Y')
    {
        for(unsigned int i = 0; i < vector_test.size(); i++)
        {
    	printf("%s\n", vector_test[i]);
    	/*cout << vector_test[i] << endl;*/
        }
    }
    


  • using namespace std;  //ist auch dabei
    

    PS: morgen bin ich registriert! ^^



  • printf("%s\n", vector_test[i]);
    

    Das geht nicht, wenn schon, dann so:

    printf("%s\n", vector_test[i].c_str());
    


  • Es funktioniert; danke ⚠

    Eine kleine Frage hätte ich noch:

    int zahl()
    {
    	int fNum;
    
    	fNum = 10 + rand() % 100;
    
    	return fNum;
    }
    

    müsste mir die Funktion nicht eine Zahl zwischen 10 und 100 ausgeben?
    wenn ich die Funktion aufrufe werden mir auch Zahlen über 100 ausgegeben.


Anmelden zum Antworten