Wiedergeben einer Char-Länge...



  • Hallo zusammen, ich weiß zwar nicht ob ich hier richtig bin, aber ich hab ein
    Problem mit meinem Code.

    Eigentlich soll das Programm eine Dezimalzahl in eine beliebige andere Zahl(binär o.ä.) umwandeln und diese dann korrekt wiedergeben!

    Die eigentliche Umwandlung funktioniert auch, aber da ich das Ergebniss in einen Char schreibe, muss ihc ihn ja rückwärts auslesen um alles korrekt dargestellt zu bekommen!

    Dies wollte ich mit eineme zweiten Char lösen, indem ich den Ersten da hineinkopiere!

    Genau da entsteht ein Fehler!

    Hier der Code-Ausschnitt:

    void Umwandlung::ergebnissAusgeben()
    {
    	int laenge = 0;
    	//size_t laenge = 0;
    	laenge = strlen(ergebniss);
    	//laenge = sizeof(ergebniss);
    	for (int i = laenge; i >= 0; i--)
    	{
    		ergebnissUmgedreht[laenge-i] = ergebniss[i];
    		ergebnissUmgedreht[laenge+1] = 0;
    	}
    	//cout << laenge;
    	//int lengthchar = strlen(ergebnissUmgedreht);
    	for (laenge = 0; laenge <= strlen(ergebnissUmgedreht); laenge++)
    	{
    		//cout << strlen(ergebnissUmgedreht);
    		cout << ergebnissUmgedreht[laenge];
    	}
    
    	/*for (int i = ergebniss.size; i > 0; --i)
    	{
    		cout << ergebniss[i];
    	}*/
    }/*lengthchar*/
    

    Das ist die Methode, die ich in meiner Klasse benutze.

    Wie mann an den auskommentierten Fragmenten sieht hab ich schon en bissel rumgebastelt...

    Beim Debuggen bekomme ich immer diese Fehlermeldung:

    Durch einen Pufferüberlauf in Umrechnung.exe wurde der interne Programmzustand beschädigt. Klicken Sie auf "Unterbrechen", um das Programm zu debuggen, oder auf "Weiter", um es zu beenden.
    
    Weitere Informationen finden Sie im Hilfethema "Gewusst wie: Debugging von Pufferüberlaufproblemen".
    

    Allerdings bin ich auch nicht schlauer geworden!



  • Probier's vielleicht eher so:

    for (int i = laenge; i > 0; i--) 
    	{ 
    		ergebnissUmgedreht[laenge-i] = ergebniss[i-1]; 
    	} 
    	ergebnissUmgedreht[laenge] = 0;
    

    Du hat vermutlich über Feldgrenzen hinaus geschrieben. Außerdem hast du die binäre Null an den Anfang deines umgedrehten Strings geschrieben, so dass da z.B. strlen 0 geliefert hätte...



  • Ganz vergessen: es gibt ja z.B. auch strrev. Du könntest deinen String einfach mit strcpy/strncpy umkopieren und dann per strrev umdrehen lassen. Und wenn du auf das Umkopieren verzichten kannst, ist es nur eine Zeile...



  • Erstmal danke an dich matze für die Antwort, aber leider hat mir das auch icht wirklich weitergeholfen!



  • Fredo82 schrieb:

    Erstmal danke an dich matze für die Antwort, aber leider hat mir das auch icht wirklich weitergeholfen!

    Ähm, wie wär's denn, wenn du mir/uns jetzt auch sagst, wieso das nicht weitergeholfen hat und wie du es versucht hast. Du wolltest einen String (nicht char sondern char*, ein char ist nur ein einzelnes Zeichen) umdrehen, und dafür habe ich dir deine Lösung korrigiert und auch eine zweite Möglichkeit genannt. Also, wie sieht dein Code momentan aus und warum klappt es nicht?

    Möglichkeit Nummer 3 wäre z.B. std::reverse. Dann musst du aus deinem String eben nur vorher einen std::string machen...


Anmelden zum Antworten