Go Down

Topic: String und Variable über Ethernet senden (Read 474 times) previous topic - next topic

herbert-f

Hallo,
ich bin absoluter Neuling, suche jetzt schon seit gestern Abend, habe aber noch keinen Treffer für mein problem gefunden.

Ich möchte über mein Ethernet Shield Strings und Variablen senden.

Bei Strings:   
client.print("%Beginn%");
funktioniert dies auch wunderbar.
Wenn ich jetzt:
String test="%Beginn%" zuweise und dann die Variable test senden möchte:
client.print(test);
kommt am Server ein zerhackter String an (Zeilenwechsel...)
Eigentlich ist doch kein Unterschied ob ich "%Beginn%" sende oder die Variable die "%Beginn%" enthält?

HILFE

jurs


Bei Strings:   
client.print("%Beginn%");
funktioniert dies auch wunderbar.
Wenn ich jetzt:
String test="%Beginn%" zuweise und dann die Variable test senden möchte:
client.print(test);
kommt am Server ein zerhackter String an (Zeilenwechsel...)
Eigentlich ist doch kein Unterschied ob ich "%Beginn%" sende oder die Variable die "%Beginn%" enthält?


Arduino kennt zwei Arten von "Strings", und zwar:
1. char-Arrays
2. String-Objekte
Und beides ist etwas gaaaanz verschiedenes.

Auf char-Arrays kannst Du die Standard-Stringfunktionen anwenden, siehe:
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html

Und mit String-Objekten kannst Du die Funktionen der String-Klasse verwenden.

Funktionen, die nicht speziell für den Umgang mit String-Objekten ausgelegt sind, erwarten grundsätzlich einen Pointer auf ein char-Array als Funktionsparameter! Und dasselbe ist offenbar bei Deiner client.print() Funktion der Fall!

Zur Deklaration eines char-Arrays musst Du Dir überlegen, wie lang das char-Array maximal sein muss, Du benötigst Platz für die maximale Länge plus ein Nullzeichen am Ende.

char str1[]="Sample string"; // <- lang genug für genau diesen String
char str2[40];  // <- 40 Zeichen, lang genug für einen 39-Zeichen-String plus Null-Char am Ende

strcpy (str2,"Test"); // <- kopiert was in den String hinein

Und der Funktionsaufruf würde dann lauten:
client.print(str2);

Wenn Du keine Funktionen hast, an die Du String-Objekte übergeben kannst, dann vermeide String-Objekte in Deinem Programm!

Nutze nur char-Arrays!
Bei C und C++ Programmierung sind char-Arrays die standardmäßige Art von Strings und NICHT String-Objekte!

Als Anfänger arbeitest Du Dich in dem Umgang mit char-Arrays und den dafür zur Verfügung stehenden Funktionen zur Stringmanipulation am besten gründlich ein, das braucht man bei C-Programmen ständig! Jedes C/C++-Tutorial hilft Dir diesbezüglich weiter.

Ich selbst verzichte in Arduino-Programmen vollständig auf String-Objekte und verwende nur char-Arrays.


Go Up