Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C++ (Arduino), přiřazování hodnot ve strukturované proměnné

V proměnné chci vložit znaky do řetězce, ale nemohu přijít na jednoducý způsob. Jediné co mi funguje, je zápis znak po znaku nebo formátovaný tisk. Oba způsoby mi přijdou trochu overkill a neelegantní. Ty co nefungují jsou v komentáři s chybovou hláškou.
Bohužel moje znalost C++ je slabá, dostal jsem se k němu až přes Arduino. Takže je skoro jisté, že jenom neznám ten správný příkaz nebo jsem něco špatně (ne)pochopil.
Byl by prosím někdo od té dobroty a naznačil mi správný směr. Případně vysvětlil, proč u proměnné Barva1 jde vložit řetězec který je kratší než definice a strukturované proměnné Light1.Colour to hlásí chybu?
Děkuji za trpělivost.

struct mix {                //definice strukturovaneho zaznamu
  int BluePin;              //cele cislo             
  boolean BlueValue;        //logicka hodnota
  float Lumi;               //cislo s desetinnou carkou
  char Colour[9];           //retezec
};

mix Light1;                 //deklarace promenne Light1 s datovym typem mix
char Barva1[7];             //deklerace retezce

void setup() {
  Serial.begin(9600);
  Light1.BluePin = 4;               //int do polozky BluePin v zaznamu Light1
  Light1.BlueValue = false;         //boolean do polozky BlueValue v zaznamu Light1
  Light1.Lumi = 15.8521;            //float do polozky Lumi v zaznamu Light1
  char Barva1[] = "ASDF";           //znaky do retezce
  Light1.Colour[3] = 'A';           //jeden znak na urcenou pozici retezce, to funguje
  sprintf(Light1.Colour,"",Barva1); //formatovane kopirovani, to funguje
  
        //tohle uz nefunguje
  //Light1.Colour = "QW";         //incompatible types in assignment of 'const char [3]' to 'char [9]'
  //Light1.Colour = "QWERTYUI";   //invalid array assignment
  //Light1.Colour = Barva1;       //incompatible types in assignment of 'char [5]' to 'char [9]'
  //Light1.Colour[0] = Barva1;    //invalid conversion from 'char*' to 'char' [-fpermissive]
}

void loop() {
  Serial.println(Light1.BluePin);
  Serial.println(Light1.BlueValue);
  Serial.println(Light1.Lumi, 2);
  Serial.println(Light1.Colour);
  delay (1000);
}
Předmět Autor Datum
? strcpy(Light1.Colour, "Querty"); Eventuelně Light1.Colour[3] = {'H', 'i', '\0'}; Ale to hádám.
Flash_Gordon 09.04.2016 16:41
Flash_Gordon
Díky, první příklad funguje, jak se znaky tak s jiným řetězcem. Neznal jsem funkce z knihovny string… poslední
Prim 09.04.2016 17:21
Prim

Díky, první příklad funguje, jak se znaky tak s jiným řetězcem. Neznal jsem funkce z knihovny string.h, potíže nesystematického začátečníka. Dokonce knihovnu v Arduino IDE není potřeba ani dávat #include, lze s funkcemi pracovat rovnou.
Druhý příklad se opět chová jinak když ho použiju pro samostaný řetězec - OK. Pokud ho použiju pro řetězec který je součástí strukturované proměnné dá chybu: „ cannot convert '<brace-enclosed initializer list>' to 'char' in assignment “.
Našel jsem tady podobnou věc. Je funkční, ale nerozumím pointerům a tak by se mi to těžko modifikovalo.
Použiji první příklad.

Zpět do poradny Odpovědět na původní otázku Nahoru