Risolto:Aiuto concatenazione array char

Buona sera, ho un quesito da porvi.
Per il mio rpogetto, ho seguito i consigli del forum, e per inviare da un arduino all'altro via RS485, ho composto un array di char come segue:

strcpy(caratteri, "t");
char car[5];
dtostrf(temp, 5, 1,car);   //converto la temperatura letta in char array
strcat(caratteri,car);

E funziona, perchè mi manda l'intestazione t seguita dalla temperatura, ma ora ho necessità di concatenare il valore di una variabile di tipo byte (termo) alla fine di caratteri ed ho scritto così

strcpy(caratteri, "t");
char car[5];
dtostrf(temp, 5, 1,car);   //converto la temperatura letta in char array
strcat(caratteri,car);                         
char c = termo + '0';
strcat(caratteri,c);

Ma non funziona, non concatena c......
Cosa sbaglio?

Devi usare la itoa() per trasformare un intero in un array di char e poi concatenare quello ...
... ciò che hai scritto tu NON ha senso ... difatti viene preso il valore contenuto nel byte "termo" (valore da 0x00 a 0xFF), ci viene sommato il valore byte 0x30 (che è l'equivalente di '0') ed il risultato della somma binaria viene messo in c.

Guglielmo

1 Like

Una alternativa, e usare snprintf(), ma la funzione è "pesante" come codice, cioè il programma scaricato su Arduino sarà un pochetto più grosso.
La snprintf() su Arduino non gestisce i numeri con la virgola (in C/C++ normale si, usando %f)
In pratica "stampi" delle variabili in un array di char
https://www.cplusplus.com/reference/cstdio/snprintf/

char car[6];      // dimensione 5+1 di fine stringa !!!!!!!!
dtostrf(temp, 5, 1,car);   //converto la temperatura letta in char array
snprintf(caratteri,sizeof(caratteri),"t%s%d0",car,termo);

al posto di %s stampa contenuto di car (che è una stringa), al posto di %d stampa contenuto di termo (che è un numero senza virgole ovvero decimale)

P.S. occhio che car DEVE avere una dimensione sufficiente per il numero COMPRESO il carattere speciale fine stringa NULL o '\0' . Quindi se hai cifre del tipo "123.4" oppure "-12.3" devi dichiarare car[6]

nid69ita:
Una alternativa, e usare snprintf() ...

... oltre che più pesante, occorre imparare bene la sintassi dei "parametri" da passare dato che è piuttosto articolata :wink:

Guglielmo

Grazie ragazzi, risolto....
Mi ero perso in un bicchiere d'acqua...

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.