[Arduino] String kann nicht nach char* konvertiert werden

  • C++

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    [Arduino] String kann nicht nach char* konvertiert werden

    Hallo,

    ich programmiere gerade etwas mit meinem Arduino und meinem OLED-Display, welches ich mit der Adafruit SSD1306-Library anspreche.

    Mein Problem, dass ich folgende Methode habe:

    C-Quellcode

    1. void printMode(char str[]) {
    2. display.setTextSize(1);
    3. display.setCursor(0,57);
    4. for(int i = 0; i < strlen(str); i++) {
    5. display.print(str[i]);
    6. }
    7. }


    und wenn ich diese mit z.B. printMode("Test") aufrufe, dann wird Test auch ausgegeben.
    Aber wenn ich eine Variable modeAlarm vom Typ String deklariere und mit modeAlarm = "Test" einen Wert zuweise
    und dann mit printMode(modeAlarm) aufrufe bekomme ich folgenden Fehler:

    Arduino IDE schrieb:


    invalid cast from type ‘String’ to type ‘char*’


    Ich weiß, was dieser Fehler bedeutet, aber wenn ich so mit einem Char-Array mache, ...

    C-Quellcode

    1. // Die Variable deklarieren
    2. char* modeAlarm = new char[20];
    3. // ...
    4. // Je nachdem, welcher Zustand es ist, den String in das Char-Array kopieren
    5. switch(alarmModeState) {
    6. case 'h': strcpy(modeAlarm, "Alarm mode (hour)"); break;
    7. case 'm': strcpy(modeAlarm, "Alarm mode (minute)"); break;
    8. }
    9. // ...
    10. // Dann printMode() aufrufen
    11. printMode(modeAlarm);


    dann kommen Zeichen heraus und keine Buchstaben.

    Ich will nicht die Klasse String benutzen, weil diese zu viel Platz verbraucht und ich lieber auf die Standard-Klassen zugreifen will.
    Den String habe ich nur zum Testen verwendet, ob er das richtig anzeigen würde.

    Gibt es eine andere Möglichkeit, das Problem zu lösen?

    Freue mich auf Antworten.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    @Alex-Digital nullDeklariere die Fnktion so:

    C-Quellcode

    1. void printMode(char* str)
    Und den anderen Body schreib so:

    C-Quellcode

    1. char* modeAlarm;
    2. switch(alarmModeState)
    3. {
    4. case 'h': modeAlarm = "Alarm mode (hour)"; break;
    5. case 'm': modeAlarm = "Alarm mode (minute)"; break;
    6. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    die Arduino-Sprache ist C++ und die Klasse String ist sehr speicherlästig habe ich wo gelesen.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Wenn das C++ ist nimm std::string, strlen und strcpy sind alles C Standardfunktionen. Guck doch einfach mal in den Header rein (basic_string<char> wäre das), intern ist da nur der Zeiger und die ganzen Funktionen, wieso sollte das speicherlastig sein ?

    So hättest du

    C-Quellcode

    1. void print_mode(const string& str)
    2. {
    3. display.setTextSize(1);
    4. display.setCursor(0, 57);
    5. for(char c : str)
    6. {
    7. display.print(c);
    8. }
    9. }

    C-Quellcode

    1. if(alarmModeState == 'h')
    2. print_mode("Alarm mode (hour)");
    3. else if(alarmModeState == 'm')
    4. print_mode("Alarm mode (minute)");

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gonger96“ ()