struct array + string + ausgabe mit printf



  • Hallo ich habe ein struct in einem Header:

    struct Karteikarte
    {
    	string Vorname;
    	string Straße;
    	string SNummer;
    	string  Stadt;
    };
    

    dann erstelle ich ein Feld mit 20 Karteikarten

    Karteikarte feld[20];
    

    dann tu ich das initialisieren mit irgend welchen Werten

    for(int i=0; i<20; i++)
    	{
    		feld[i].Vorname = "Dieter";
    		feld[i].Straße = "Feldweg 3";
    		feld[i].Stadt = "Erfurt";
    		//feld[i].SNummer = (char) i;
    	}
    

    bis dahin geht alles und jetzt kommt das problem ch will das ganze testweise ausgeben

    for(int i=0; i<20; i++)
    	{
    	printf("%s wohnt in der/im/am %s in %s und hat die Schornsteinnummer \
    			   \n", feld[i].Vorname, feld[i].Straße, feld[i].Stadt);
    	}
    

    ja und bei der ausgabe kommt dann :

    Unbehandelte Ausnahme bei 0x10227c2f (msvcr80d.dll) in Uebung_8.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x74656944.
    

    an der stelle in der outpu.c :

    #else  /* _UNICODE */
                    if (flags & (FL_LONG|FL_WIDECHAR)) {
                        if (text.wz == NULL) /* NULL passed, use special string */
                            text.wz = __wnullstring;
                        bufferiswide = 1;
                        pwch = text.wz;
                        while ( i-- && *pwch )
                            ++pwch;
                        textlen = (int)(pwch - text.wz);
                        /* textlen now contains length in wide chars */
                    } else {
                        if (text.sz == NULL) /* NULL passed, use special string */
                            text.sz = __nullstring;
                        p = text.sz;
          --->            while (i-- && *p)
                            ++p;
                        textlen = (int)(p - text.sz);    /* length of the string */
                    }
    

    ich denk mal ich muss das anders ausgeben aber ich hab noch kein plan wie. Wer kann mir da helfen? Wenn ja wie?



  • printf und std::string passen nicht. Da wirst Du c_str() verwenden müssen um es printf recht zu machen.

    Besser wäre aber die Ausgabe mit cout:

    cout<<feld[i].Vorname << " wohnt in der/im/am " << feld[i].Straße <<" in "<< feld[i].Stadt << " und hat die Schornsteinnummer "<<endl;
    


  • wie benutz ich dieses c_str()? und was muss ich dafür noch einbinden



  • Hallo

    c_str() ist eine Methode von std::string. Wenn du also schon std::string verwendest, must du nichts weiter für c_str() einbinden.
    Sondern du rufst es für das konkrete String-Objekt auf

    std::string test = "Test";
    func(test.c_str());
    

    Allerdings solltest du unbedingtwie Knuddelbaer gezeigt hat die ordentlichen C++ Mittel benutzen, statt alter C-Mittel.

    bis bald
    akari



  • mir hat mal jemand gesagt das cout net so toll sein soll



  • Hallo

    Dann frag doch mal dem jemand, was an cout "net so toll" sein soll.
    Und warum das typunsiche printf benutzten will.

    bis bald
    akari



  • pad8626 schrieb:

    mir hat mal jemand gesagt das cout net so toll sein soll

    Ist es auch nicht. Aber immer noch besser als dieses ganze printf Zeugs.



  • wenn beides net toll ist gibts alternativen ??



  • Wozu, nutzt einfach cout, das ist ausreichend und noch dazu Typensicher! 🙂



  • war aber nicht antwort auf meine frage


Anmelden zum Antworten