Concatenazione stringhe

Ciao,
Volevo concatenare delle stringhe come:
totale = String(aa[1])+String(aa[2])+String(aa[3]); ecc.
ma usando un ciclo, pensavo che bastasse:

 for(int i=1; i <N; i++)
                  {
                    totale += String(aa[i]);
                  }

oppure:

for(int i=1; i <N; i++)
                  {
                    totale.concat(String(aa[i]));
                  }

ma non funziona!
Dove sbaglio?

Grazie

Io ti sconsiglio vivamente di usare String.

char totale [80];

for(int i=1; i <N; i++)
{
strcat (totale ,aa[i]);
 }

P.S. hai omesso il tipo della variabile aa.
che roba è?

Se ti serve usare la classe String di arduino allora tutti gli array di stringa li devi trasformare in oggetti di tipo String e dopo li puoi concatenare con l'operatore + il quale funziona con gli oggetti C++, ma non funziona con gli array di caratteri.

Mentre se hai solo la necessità di concatenare più array di caratteri puoi usare la funzione di libreria standard C strcat(str1, str2), cerca il reference di avr-libc per sapere come usare strcat o in genere fai riferimento a qualunque risorsa in rete che spiega l'uso delle funzioni standard C.

niki77 mi ha anticipato.

Ciao.

niki77:
P.S. hai omesso il tipo della variabile aa.
che roba è?

byte aa[N];

con totale = String(aa[1])+String(aa[2])+String(aa[3]);
funziona ma con strcat

error: invalid conversion from 'char' to 'const char*
quindi penso come suggerito devo trasformare in oggetti di tipo String!

tra i vari costruttori di String() c’e’ la possibilità di passare anche una costante char, inteso come

x=String('A');

Tu invece passi un char preso da un elemento di un vettore che non è const.
Prova a forzare il cast:
totale = String( (const char)aa[1] )+String(aa[2])+String(aa[3]);

P.S. ma a me questo compila:

String totale;
byte aa[10];

void setup()
{ totale = String( aa[1] )+String(aa[2])+String(aa[3]);
}
void loop(){}

llluca:
con totale = String(aa[1])+String(aa[2])+String(aa[3]);
funziona ma con strcat

error: invalid conversion from ‘char’ to 'const char*
quindi penso come suggerito devo trasformare in oggetti di tipo String!

Non è che una soluzione è giusta e una è sbagliata.
Sono due cose diverse, certo che se tenti di concatenarci un byte senza fare il cast appropriato è ovvio che non va!
Ma poi che cosa rappresenta quel byte? Un numero o un carattere?

niki77:
Ma poi che cosa rappresenta quel byte? Un numero o un carattere?

Si è un numero,
Ti mando tutta la funzione che non è elegantissima ma funziona!

int Numero(byte N){
 
  byte ricevo, y;
  y =0;
  byte  aa[N];
  String totale;
  do{
     if (y >=N) {y =0;}
        ricevo=telecomando();
          if  ((ricevo < 10) and (y < N))
                {
                  y =y++;
                   lcd.setCursor(5,2);
                  lcd.print(ricevo);
                  aa[y]=ricevo;
                }
     }                         
   while(y!= N);
        totale = String(aa[1])+String(aa[2])+String(aa[3])+String(aa[3])+String(aa[4]);
        char char_string[N+1];
        totale.toCharArray(char_string, N+1);
        int num = atoi(char_string);
              Serial.print("conversione in numero: ");
              Serial.print(num);
              Serial.println("  ");
              return num;
  
            }

volevo evitare di scrivere : totale = String(aa[1])+String(aa[2])+String(aa[3])+String(aa[3])+String(aa[4]);

A me con IDE 1.0.5 compila:

String totale;
byte aa[]="CIAODAME";

void setup()
{ delay(1000);
  Serial.begin(9600);
  for(int i=1;i<=3;i++)
    totale += String( aa[i] );
  Serial.println(totale);      // ma stampa 736579
}
void loop() {}

Ma devi per forza usare il cast a (char) altrimenti interpreta l’elemento come numero richiamando il costruttore con parametro int

{ for(int i=1;i<3;i++)
    totale += String( (char)aa[i] );
}

Il problema è proprio questo, il cast!

se il valore in byte contenuto in quella variabile è ad esempio 3, tu cosa vuoi rappresentare ?
Con la soluzione di nid69ita viene rappresentato il carattere 3 della tabella ascii, non credo sia quello che vuoi tu.

[quote author=nid69ita link=topic=178947.msg1326474#msg1326474 date=1374593033]
A me con IDE 1.0.5 compila:

Scusa sono stato poco chiaro non volevo dire non Compila ma che non mi restituisce il numero corretto ma restituisce numeri apaprentemente casuali che forse sono la somma della rappresentazione ascii,
per questo chiedevo aiuto.
La funzione che ho pubblicato invece funziona volevo solo capire perchè?

Esistono vari costruttori totale= String(qualcosa);
Se vai a vedere dentro a String.h o sul sito dove parla del costruttore String() vedrai che esiste anche un costruttore per int e uno per char.

Quando scrivi totale=String('A');
il compilatore non ha dubbi perchè passi una const char

se scrivi totale=String(65);
il compilatore non ha dubbi perchè passi un int

se scrivi totale=String( aa[i]);
passi il contenuto di un vettore di char (o byte) che poi è un numero.

Secondo me per il compilatore è più logico richiamare String(int) piuttosto di String(const char)

Ciao,
Le vostre spiegazioni sono state ILLUMINANTI ho capito che l'errore stava altrove
nelle due righe successive:
modificate in:

 char char_string[N];
        totale.toCharArray(char_string, N);

Funziona!!
+1
Mille grazie
Luca