ISO C++ forbids converting a string constant to [char*]

Programmierung und Hardwaredesign mit Arduino, AVR, PIC und Konsorten.

Moderatoren: MaxZ, ebastler, SeriousD

Antworten
Benutzeravatar

Thread-Ersteller
L_B_S
Beiträge: 551
Registriert: Fr 24. Jul 2015, 10:13
Schule/Uni/Arbeit: KFZ-Elktr.
Hat sich bedankt: 24 Mal
Danksagung erhalten: 23 Mal

ISO C++ forbids converting a string constant to [char*]

Beitrag von L_B_S »

Hallo zusammen,

hier mal ein Auszug aus einer Arduino-Referenz
Oftmals ist es sehr komfortabel, wenn man mit langen Zeichenketten, Wörtern oder Sätzen arbeitet (z.B. ein Projekt mit LCD-Anzeige), dann ein String-Array zu bilden.
Da Strings ja selbst schon ein Array sind, handelt es sich hier also um ein zweidimensionales Array.
In dem unten angeführten Code-Beispiel bedeutet und bezeichnet der Stern hinter dem Datentyp char, dass es sich hierbei um einen String mit “Pointern” handelt.
Da alle Arraynamen eigentlich Pointer sind, ist das notwendig, um ein Array von Arrays zu bilden (Zweidimensionales Array). Pointer sind ein Teil der eher „esoterischen“ Teile
der C-Programmiersprache und schwer zu verstehen für Anfänger. Aber in diesem Codebeispiel ist es nicht notwendig, die Benutzung von Pointern zu verstehen, um sie
effizient einzusetzen (ideal für Auswahl unterschiedlicher Anzeigetexte in LCD’s aufgrund von Entscheidungen im Programm [A.N.]).
dazu das Prog. Beispiel:

Code: Alles auswählen

char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};

void setup(){ // Setup wird einmal durchlaufen
       Serial.begin(9600); // serielle Schnittstelle 9600Bd initialisieren
}
void loop(){ // Hauptprogramm wird in Schleife durchlaufen
       for (int i = 0; i < 6; i++){ // 6 mal ausführen
       Serial.println(myStrings[i]);
      delay(500); // Pause 0,5 Sekunden
}
}
unter der IDE 1.8.7 überprüft/compiliert kommt diese Warnung C++ forbids converting a string constant to [char*]

unter der IDE 1.6.7 wird's ohne Anmeckern compiliert
Wie sollte der Code denn aussehen, unter der IDE 1.8.7 , ohne daß da was angemeckert wird ?

Gruß
Ludwig
Benutzeravatar

Thread-Ersteller
L_B_S
Beiträge: 551
Registriert: Fr 24. Jul 2015, 10:13
Schule/Uni/Arbeit: KFZ-Elktr.
Hat sich bedankt: 24 Mal
Danksagung erhalten: 23 Mal

Re: ISO C++ forbids converting a string constant to [char*]

Beitrag von L_B_S »

....hab da noch etwas gefunden
String nach char kopieren
Quelle: deutsches ARDUINO-Forum, Member Tommy56
Manchmal besteht die Notwendigkeit, eine Variable vom Typ String in eine Variable vom Typ char-Array zu kopieren. Das geht so ohne weiteres nicht. Mit diesem kleinen Codeschnipsel ist es schnell erledigt:

String Text = "Hallo Welt"; // der String, welcher kopiert werden soll
char mychar[20]; // das char-Array, in welches kopiert werden soll
strcpy(mychar,Text.c_str());
werd's mal testen
Benutzeravatar

V-Troxi
Beiträge: 239
Registriert: Sa 14. Apr 2018, 20:52
Hat sich bedankt: 27 Mal
Danksagung erhalten: 49 Mal

Re: ISO C++ forbids converting a string constant to [char*]

Beitrag von V-Troxi »

Hi,

du initialisierst die char Pointer des Arras per String Literal, was zur Compiletime feststeht. Der Compiler sieht diese Strings daher als Konstant an (da ein nicht konstanter Pointer zu einem konstanten String kein Sinn ergibt). Falls du nicht vor hast, dein Array später zu ändern, definiere es einfach als const char* ...

LG
V-Troxi
Benutzeravatar

Thread-Ersteller
L_B_S
Beiträge: 551
Registriert: Fr 24. Jul 2015, 10:13
Schule/Uni/Arbeit: KFZ-Elktr.
Hat sich bedankt: 24 Mal
Danksagung erhalten: 23 Mal

Re: ISO C++ forbids converting a string constant to [char*]

Beitrag von L_B_S »

Jou, klappt

Danke 8)
Benutzeravatar

V-Troxi
Beiträge: 239
Registriert: Sa 14. Apr 2018, 20:52
Hat sich bedankt: 27 Mal
Danksagung erhalten: 49 Mal

Re: ISO C++ forbids converting a string constant to [char*]

Beitrag von V-Troxi »

;)
Antworten