Frage von SandUhrGucker, 33

(Arduino/GNU C) Char* int und String verbinden. Wer weis Rat?

Bei meinem Arduino-Projekt habe ich grade maximale konfusion beim simplen verbinden von Ausgabewerten (String für LCD) erreicht. Ich bekomme es einfach nicht hin.

Das Ziel: Ein String, der enthält "Temp: (22°)/(44°)"

Hier die relevanten Auszüge aus meinem Code: So initialisiere ich die Variablen/Strukturen:

typedef struct {
  int index;
  char* entry;
  int value;
  int valueMax;
} menuEintrag ;

typedef struct {
  char* line1;
  char* line2;
  char* line3;
} Display ;

Display displayFull{
  "INIT",
  "INIT",
  "INIT"
};

und jetzt hier die Stringbastelei:

  // display lcd
  displayFull.line1="Programm Running";
  displayFull.line2="Delay()/RPM()";
  displayFull.line3="TEMP(";
  displayFull.line3 += currentTemp;
  displayFull.line3 += ")/("; // hier beginnt der compiler zu meckern!
  displayFull.line3 += setTemp;
  displayFull.line3 += ")";

Weis hier jemand wie ich das fixen kann? Die volle Meldung des compilers lautet: "error: invalid operands of types 'char*' and 'const char [4]' to binary 'operator+'"

Gruß Rene´

Antwort
von ralphdieter, 19

So macht man das wohl in JavaScript :-)

In C ist "abc"+i = &("abc"[i]) eine Pointer-Addition, und "abc"+"def" ist nicht definiert (daher die Fehlermeldung).

Ich gehe mal davon aus, dass Du in jeder Zeile eine formatierte Ausgabe erlauben willst. Dann geht's am einfachsten so:

#define LINE = 64+1; /* Zeilenlaenge+'\0' */

typedef struct {
char line1[LINE];
char line2[LINE];
char line3[LINE];
} Display ;

snprintf( displayFull.line1, LINE,
 "%s", "Program Running" );
snprintf( displayFull.line3, LINE,
 "TEMP(%2d°)/(%2d°)", currentTemp, setTemp );

Ich nehme an, die printf-Formatierung ist Dir geläufig.

Keine passende Antwort gefunden?

Fragen Sie die Community