einstellige Variable in "char *controller" speichern

Hallo,

Für mein Projekt muss ich eine Zahl [1...9] in eine Variable, die mit "char *controller" definiert habe, einfügen.

Wenn ich

controller = "1";

eingesetzt habe, funktioniert es fehlerfrei, aber wenn ich

controller = teamAS;

versuche, dann spuckt er mir den Fehlercode aus:

"CTF_sender_V0.5_A.ino: In function 'void loop()': CTF_sender_V0.5_A:172: error: invalid conversion from 'int' to 'char*' [-fpermissive] invalid conversion from 'int' to 'char*' [-fpermissive]"

"teamAS" habe ich als normale Variable mit "int teamAS = 0;" erstellt, die im weiteren Verlauf des Programmes mit "teamAS = teamA+id;" errechnet habe (sind beides normale "int" Variablen

Mir ist der Fehler Klar: Ich muss die Variable zuerst in ein Format bringen, das "controller" frisst.

Aber wie?

Danke schonmal für eure Hilfe!!

LG Atvilar

char *controller definiert keine Variable, sondern einen Zeiger.

Du solltest char controller definieren, dann hast du genau EIN Byte Platz. Da kann man keine INT reinschreiben, da die 2 Byte Platz braucht.

controller=65; controller='A'; controller=0x41;

wäre alles ok und das gleiche

Wie soll das auch gehen? Das sind verschiedenen Datentypen. Dafür gibt es eine ganze Reihe Konvertierungsfunktionen in beide Richtungen.

http://www.cplusplus.com/reference/cstdlib/itoa/ http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#gaa571de9e773dde59b0550a5ca4bd2f00

Du musst auch begreifen dass mit char* eigentlich ein Array gemeint ist (das groß genug für die Anzahl der Zeichen + 1 ist!). Array Variablen zerfallen in Zeiger auf das erste Element. Wenn du nur einen Zeiger anlegst, aber keinen Speicher gibt es zur Laufzeit Ärger.

Für eine Ziffer von 0-9 reicht aber auch ein char völlig aus:

char c = '5';

Und um 5 in '5' zu konvertieren muss man nur '0' dazu addieren. Siehe ASCII Tabelle

Hallo,

Ich habe das von Serenifly angesporchene " +'0' " ausprobiert:

teamAS = teamAS+'0';
controller = teamAS;

sowie

controller = '0'+teamAS;

funktionieren beide nicht; Leider die Idente Fehlermeldungen.

Hat jemand eine Idee, bzw. eine Anleitung mit Praxisbeispielen, aus denen ich lernen kann?

Die Links sind mir leider zu abstrakt, ich lerne auf eigene Faust :(

Vielen Dank um eure Hilfe!!

LG Atvilar

Bei mir geht das ohne Probleme, du machst was anderes falsch.

Aber da ich deinen Kode nicht ganz sehen kann...

Meiner sieht so aus

int teamAS = 5;
char controller = '4';
char* pChar = &controller;  // ein Pointer auf die Variable

void setup() {
  Serial.begin(115200);
  Serial.print(F("teamAS "));
  Serial.println(teamAS);
  Serial.print(F("controller "));
  Serial.println(controller);
  teamAS = teamAS + '0';
  controller = teamAS;
  Serial.print(F("teamAS "));
  Serial.println(teamAS);
  Serial.print(F("controller "));
  Serial.println(controller);
  teamAS = 3;
  *pChar = teamAS + '0';
  Serial.print(F("teamAS "));
  Serial.println(teamAS);
  Serial.print(F("controller "));
  Serial.println(controller);
}
void loop() {}
teamAS 5
controller 4
teamAS 53
controller 5
teamAS 3
controller 3

ich lerne auf eigene Faust

Warum fragst du dann ;)

invalid conversion from 'int' to 'char*'

Was soll das char* wenn du vermutlich char meinst?

controller = "1"; Was sollen die " " (double quote) Zeichen ? Ausserdem fehlt die offensichtlich falsche Definition der Variable controller.

[Nachtrag] Whandalls Beispiel ist gefährlich, wenn du mit seinem

char controller = '4';
char* pChar = &controller;  // ein Pointer auf die Variable

weiter spielst. char* pCharerwartet in den allermeisten Fällen, z.B. beiSerial.print(pChar);eine EndeNull. Aber was hinter der Variablechar controllerim Speicher steht, ist undefiniert.

Atvilar:
funktionieren beide nicht;

Weil du willkürlichen Code eintippst ohne die Datentypen zu verstehen! Lerne was ein char ist und wie man ihn verwenden kann. Lerne was C Strings sind (d.h. null-terminierte char Arrays). Lerne was Zeiger sind und wie sie mit Arrays zusammenhängen

Die Links sind mir leider zu abstrakt, ich lerne auf eigene Faust

Du lernst nichts wenn du einfach Code eintippst und hoffst das es compiliert. Dass dir die Zusammenhänge fehlen ist klar, aber irgendwann kommst du nicht darum herum dir anzusehen wie diese Funktionen arbeiten. Wenn du die Hintergründe verstehst, kannst du anhand der Parameter, des Rückgabewertes und der Beschreibung schnell sehen was du machen musst.

void setup() 
{
  Serial.begin(9600);

  //Ziffer von 0-9 in ASCII Zeichen konvertieren
  for (int i = 0; i < 10; i++)
  {
    char c = i + '0';
    Serial.println(c);
  }

  Serial.println();

  //Zahl von 10-19 in C String konvertieren
  char buffer[10];   //muss mindestens Platz für String-Länge + 1 haben
  for (int i = 10; i < 20; i++)
  {
    itoa(i, buffer, 10);
    Serial.println(buffer);
  }
}

void loop() 
{
}

Und unbedingt beachten, dass char* nur ein Zeiger ist! Da steht kein richtiger Speicher dahinter und du darfst da niemals einfach so einen Wert reinschreiben. Damit überschreibst du ungültigen Speicher.

Serenifly: Und unbedingt beachten, dass char* nur ein Zeiger ist! Da steht kein richtiger Speicher dahinter und du darfst da niemals einfach so einen Wert reinschreiben. Damit überschreibst du ungültigen Speicher.

"Ungültiger Speicher" :confused:

Du meinst, er überschreibt Speicherbereich(e), die nicht mehr zur Variablen gehören, sondern zu anderen Variablen oder Programmcode. Das führt meist zum nicht mehr korrekten Funktionieren des Sketches, kann bis zum Freezer oder Reset gehen. Und diese Fehler sind dann schwer zu lokalisieren.