CString konvertieren von C++ nach C



  • Hi Leute!
    Ich versuche einen Roboter zum Lösen eines Rubiks-Cube zu programmieren.
    Ich hab einen C++ Code, brauche aber einen Code in C für den Mikrocontroller...^^

    Im Moment hänge bei dem Cstring in C++. Für den Code ist es wichtig dass ich zu einem bestehenden String weitere Zeichen hinzufügen kann und auch unkompliziert wieder löschen kann. Außerdem sollte keine übermäßige Menge an Speicherplatz verbraucht werden.
    Verkettete Liste und Array scheinen mir möglich. Aber gibt es vielleicht eine elegantere Lösung?

    Schonmal vielen Dank!
    Manu



  • Erstens: Was genau meinst du mit "CString"? Die MFC Stringklasse? std::string? Etwas eigenes?

    Zweitens: Ich würde mit dynamisch angefordertem Speicher (malloc() und Kollegen) und den Standard-Stringfunktionen (strcpy(), strcat() etc) mir eine eigene String-"Klasse" zusammenbauen. Wenn du keine Heap-Verwaltung nutzen kannst, bleiben nur Arrays mit fester Maximallänge.


  • Mod

    Der Comeau C++-Compiler erzeugt C-Code. Käme das für dich in Frage? Deine Anforderung klingt etwas komisch. Wenn es ein Mikrocontroller ist, wird der doch vermutlich ohnehin so einiges nicht können, sonst hätte er ja schon eine höhere Entwicklungssprache dabei.

    Außerdem bin ich etwas verwirrt, wie du bei einem Rubik-Würfel Zeichenketten brauchst.



  • In C gibt es keinen standardisierten String-Datentyp. Es gibt Arrays von char und Zeiger auf char Speicherbereiche, die, wenn sie ihren Inhalt mit char '\0' am Ende kennzeichnen, überlicherweise als String bezeichnet werden.
    Dafür gibt es dann Standardfunktionen, die z.B. str* o.ä. heißen, mit den o.g. Datenkonstrukten klarkommen und von deinem C Compiler unterstützt werden sollten.
    Definiere dir einen char Speicherbereich mit einer für deinen Anwendungsfall maximalen Größe und arbeite dann damit:

    #define MAXSTRLAENGE 1000
    char s[MAXSTRLAENGE+1];
    ...
    s[0]='\0';
    puts(s);
    strcat(s,"1");
    puts(s);
    strcat(s,"22");
    puts(s);
    ...
    


  • Wie Wutz geschrieben hatte gibt es in C keinen Datentyp string, nur arrays auf characters. Mit Zeigern und den vorhandenen Standardfunktionen str* kann man damit alles machen. Also der Mircocontroller kennt kein C++ und damit keine Cstrings std::string? Dann musst du das Programm auf native C umschreiben oder sehen, was der C++ Compiler daraus gemacht hat. Der Weg von unten C nach oben C++ ist sicher einfacher als von oben C++ nach unten C



  • Vielen Dank für eure Hilfe, es hat uns sehr weitergeholfen, wir werden eure Beiträge nutzen um eine Lösung zu finden,

    nochmals vielen Dank,

    Manu


Anmelden zum Antworten