C-Problem: Konvertieren von char* in String

Liebe Arduino-Gemeinde

Irgendwie bin ich mit der C-Sprache noch immer etwas auf Kriegsfuss. Hier mein jüngstes Problem.

Ausgangslage ist folgende Definition:

char tmpBuffer[100];  // Wird universell benutzt

Um nun zum Beispiel die Länge des "Strings" herauszufinden, benutze ich folgende Konversion:

String s(tmpBuffer);
// oder auch
String s = tmpBuffer;
int l = s.length();

Wenn ich den Char Array oder das String an eine Funktion übergebe

setNewText(TXT_POS_WOCHE_X, TXT_POS_WOCHE_Y, WHITE, BLACK, 1, tmpBuffer);
// oder auch mit
setNewText(TXT_POS_WOCHE_X, TXT_POS_WOCHE_Y, WHITE, BLACK, 1, s);

erhalte ich mit dem Compiler des Arduino DUE die Fehlermeldung

DUE_Uhr.ino:287:60: error: converting to 'String' from initializer list would use explicit constructor 'String::String(int, unsigned char)'

Die Funktion ist wie folgt definiert:

void setNewText(uint16_t x0, uint16_t y0, uint16_t color, uint16_t bgcolor, uint8_t size, String txt) 
{}

Irgendwie kriege ich es nicht auf die Reihe, wie ich das formulieren soll, damit der Compiler ruhig bleibt.

Kann mir jemand bitte auf die Sprünge helfen?

Wieso bleibst du nicht bei char Arrays? Auf dem Due spielt die Ineffizienz der String Klasse zwar keine so große Rolle, aber es gibt keine Anwendung bei der man String Objekte wirklich braucht.

Danke für den Tipp, Serenifly.
Ich habe die String-Verwendung eliminiert, et voilà, hat nach ein paar leichten Anpassungen wunderbar geklappt. :slight_smile:
Habe wohl mitten im Wald die Bäume übersehen. :roll_eyes:

Herzlichen Dank!

:slight_smile:

Und wenn es schon String Objekte hätten sein müssen, dann wäre es besser gewesen das lediglich als Referenz zu übergeben. Man übergibt generell keine größeren Datenstrukturen by-value. Egal ob es Strings, structs oder sonstige Objekte sind. Abgesehen vom Speicherverbrauch rein bei der Parameter-Übergabe verursacht das nämlich leicht solche Probleme bei Copy-Konstrukturen u.ä.