Go Down

Topic: Chars verbinden bzw. Variable nach und nach mittels for-Schleife erstellen (Read 264 times) previous topic - next topic

Tim23

Hallo,

ich bin ziemlich neu dabei und arbeite derzeit an einem kleinen Projekt. Hierbei bin ich auf folgenden Herausforderung gestoßen, welche ich trotz intensiver recherche nicht lösen konnte. Hier ein vereinfachtes/abgekürzter Codetext als Erklärung:
Quote
for (i =0, i < 8, i++) {
...
if (number==1){
p = array1 [ x ];}
if (number==2){
p = array2 [ x ];}
lcd.setCursor (i,0);
lcd.print p;}


Kurz zusammengefassst:
In meiner For-Schleife wird p nach jeder Wiederholung ein neuer Wert zugewiesen (kann Zahl, Buchstabe, Sonderzeichen sein). Dieser wird dann angezeigt auf einem lcd (beispiel Ergebnis "Hallo 123?!"). Das Ergebnis hätte ich nun gerne allerdings einer Variablen zugewiesen. Mein erster Gedanke war, ein Array daraus zu basteln, nach dem Motto "array3 = p;" allerdings hab ich dann ein array und mein Ziel ist die Zuweisung zu einer bestimmten Variablen.

Nun gibt es eine Möglichkeit einer Variablen (z.B. Z) ein Array zuzuordnen? Oder gibt es eine andere Möglichkeit innerhalb der For-Schleife das Problem schon zu umgehen?
                                                     
Noch als Info die For-Schleife befindet sich innerhalb einer Funktion (keine Ahnung ob das wichtig ist).

Vielen Dank schon im voraus!

Mir ist noch nicht ganz klar was du erreichen möchtest.
Aber ich habe Folgendes verstanden:
Du willst in der Schleife an einen bestehenden String Zeichen anhängen.
Das geht mittels "concat".
http://arduino.cc/en/Reference/StringConcat#.UyW4eIXN5AY


Serenifly

In C sind Arrays nicht anderes als Zeiger auf das erste Element (und strings sind Null-terminierte char Arrays). Man kann als einfach sowas machen:

Code: [Select]

char str = "test123";
char* var = str;

Das ist keine Kopie, sondern var zeigt dann einfach auf str


Beachte auch dass du aus einer Funktion nicht Zeiger auf lokale Variablen zurückgeben darfst, da der Speicher nach Beenden der Funktion ungültig ist! Der Standardweg ist dabei das Array außerhalb zu deklarieren und einen Zeiger als Parameter zu übergeben:
Code: [Select]

void func(char* str)
{
   str[0] = ...;
}

void loop()
{
   char str[10];
   func(str);
   Serial.println(str);
}



Liest dir vielleicht mal das durch:
http://openbook.galileocomputing.de/c_von_a_bis_z/011_c_arrays_001.htm#mje29de26c54a3884f7316cbbb2a073ad8

Und speziell zu C Strings:
http://openbook.galileocomputing.de/c_von_a_bis_z/011_c_arrays_011.htm#mja452663858fd23e86c51cfa3b9139f64
http://www.c-howto.de/tutorial-strings-zeichenketten-nullterminiert.html

Bei Strings unbedingt auf die Null-Terminierung achten, sonst bekommst du Probleme zur Laufzeit! Der letzte Index muss '\0' enthalten, damit man weiß wenn der String zu Ende ist. Deshalb müssen char Arrays auch eins größer als die Anzahl der sichtbaren Zeichen sein.


In dem Galileo Code wird da als Parameter "array[]" übergeben. Das ist natürlich nicht falsch, aber verschleiert etwas was eigentlich gemacht wird. Das Array in ein struct zu verpacken wie da ist elegant, aber man sollte auch wissen wie es ohne geht. Die ganzen Standard C String Funktionen haben einfach einen char* oder const char* als Parameter für Arrays. Genauso mit void* bei Funktionen wie memset()

Serenifly


Du willst in der Schleife an einen bestehenden String Zeichen anhängen.
Das geht mittels "concat".
http://arduino.cc/en/Reference/StringConcat#.UyW4eIXN5AY

Das ist für die Arduino String Klasse. Nicht für char Arrays. Vergiss das bitte sofort wieder. Ineffizienter kann man sowas kaum machen.

Außerdem ist das für zwei Strings und nicht um chars dranzuhängen. Die C Funktion dafür ist strcat(), bzw. strncat()

Go Up