Grundlagen: Werte in Variable anhängen a.b.c.d

Hallo alle zusammen,

ich habe eine grundlegende Frage zu Variablen.

Wie kann ich jeweils einen chr an einen Variablenwert anhängen?
in etwa so:

char a[0] “T”;
char a[1] “O”;
char a[2] “L”;
char a[3] “L”;
char alles[4];

for(i=0;i<4;i++)
{ char alles = char alles . char a*;*

  • }*
    Ausgabe → char alles → TOLL
    oder wie ist die korrekte Syntax für so etwas?

Der Hintergrund dafür ist, dass ich die IMEI später als Variable per Get übertragen will. Ich dachte mir, dass ich WhileSimpleRead() so modifiziere, dass statt des Serial.print(datain) die Daten in eine Variable geschrieben werden.

 gsm.SimpleWrite("AT+GSN");
 delay(2000);
 gsm.WhileSimpleReadOut(); 

void SIMCOM900::WhileSimpleRead()
{   char datain;
    while(_cell.available()>0){
        datain=_cell.read();
        if(datain>0){
            Serial.print(datain);
        }
    }
}

Ich sehe schon, muss noch viel lernen. Arbeite erst 3 Tage damit.

Gruß, Marko

So ganz habe ich dein Problem nicht verstanden… du kannst die Variable ja als char-Array definieren und dann in einer Schleife zuweisen, also z. B. 10 Zeichen in der Schleife einlesen… das geht aber nur so, wenn du jeweils nur ein Zeichen auf einmal einliest und zuweist, ansonsten kannst du die Funktion strcat() zum Konkatenieren (Aneinanderfügen) von Strings benutzen

char input[11];

for (int index = 0; index < 10; index++)
{
  input[index] = _cell.read();
}
input[10] = '\0';   // String abschließen

Rudi

Danke Rudi

strcat() ist die bessere Lösung.

allerdings verstehe ich nicht, warum er das char bemängelt

Fehlermeldung: initializing argument 1 of ‘char* strcat(char*, const char*)’

 int x = 0;
  char dataout;
	char datain; 
	while(_cell.available()>0){
		datain=_cell.read();
		if(datain>0 and datain != 'O' and datain != 'K')
		  { if(x>5 and x<21)
 		      { Serial.print(datain);
		        Serial.print("\n");
			strcat(dataout, datain);
		      }
		    x++;
		  }
	}

datain und dataout sind als char definiert.
Was will es noch?

Ein char stellt nur ein einzelnes Zeichen dar, du musst das als array of char definieren

char dataein[11];

reserviert Platz für einen String mit 10 Zeichen.

aber datain ist immer nur exakt ein Zeichen.
ich habe jeweils ein zeichen pro Zeile bei

Serial.print(datain);
Serial.print("\n");

nur dataout hat mehr Zeichen, 15

habe es erst versucht in ein Array zu schreiben. Hat funktioniert.
Als ich allerdings das Array wieder mit strcat verbinden wollte, war ich wieder bei der gleichen Fehlermeldung wie am Anfang :frowning:

void SIMCOM900::WhileSimpleReadOut()
{  int x = 0; int n = 0;
  char dataout[15];
	int datain; 
	while(_cell.available()>0){
		datain=_cell.read();
		if(datain>0 and datain != 'O' and datain != 'K')
		  { if(x>5 and x<21)
 		      { Serial.print(datain);
		        Serial.print("\n");
			//dataout[n] = datain;
			strcat(dataout, datain);
			n++;
		      }
		    x++;
		  }
	}
/*
 char myIMEI[16];
 for(x=0;x<15;x++)
    { char a = dataout[x];
      strcat(myIMEI, a);
    } myIMEI[16] = '\0';
*/
}

Du kannst mit strcat nur zwei Strings (d. h. character-Arrays) verbinden, nicht jedoch ein Zeichen hinzufügen - für diesen Fall musst du das Zeichen einzeln hinzufügen, wie ich es in meinem ersten Post beschrieben habe.

Rudi