Muzes deklarovat pole stringu, aniz bys znal velikost pole, ale pak budes muset to pole alokovat podle potreby a do te promenne podstrcit a sampmzrejme si hlidat, abys neprekrocil aktualni meze.
Nebude ti spravne fungovat, kdyz ho deklarujes bez rozsahu a pak do nej budes pridavat. (Jako asi se chvili bude zdat, ze to funguje, ale pak nakjednou zjistis, ze se ti divne meni nejruznejsi promenne a nic nefunguje jak ma, protoze se ti nehlidaji meze a prepisujes pamet, co ti nepatri)
Obecne bych se spis klonil k tomu udelat to ciste prez nejakou dynamickou strukturu typu seznam, nebo B-tree, nebo cokoli jineho potrebujes / lepe se hodi pro tvuj ucel.
A u Arduina (a podobnych mrnavosti, co maji malo RAM) bych byl s dynamickymi alokacemi na halde docela opatrny, protoze pameti je malo a s trochou smuly ji muzes snadno fragmentovat (a nasledne vypotrebovat), nez se nadejes - dostanes se do stavu, ze alokovaneho nemas moc, ale presto nejde nic alokovat, protoze neni kde, i kdyz by ti teoreticky melo zbyvat jeste dost volne pameti. Ale prakticky nezbyva, protoze neni v dost velkem souvislem kuse.
A hratky se String (jakozto objektem, co si sam alokuje dynamicky pamet) se ve vetsim muzou ukazat zdrojem problemu. Ja davam prednost char * kde to jen jde a organizuju si to sam. Stejne jako vystupy delam radeji radou vypisu jednotlivych promennych, nez jejich sestavenim do Stringu a naslednym jedinym vypisem.
---
A ano Arduino je neco jako C++/G++ s knihovnou Wiring a radou knihoven casto dost pochybne kvality. Ale muzes tam pouzivat vetsinu konstrukci toho jazyka (IMHO skoro vsechny) a radu standardnich knihovnich funkci (ty urcite ne vsechny, protoze spousta toho tam neni kvuli velikosti).