Buongiorno a tutti.
Ho un problema che purtroppo non riesco a risolvere.Le mie conoscenze di C non arrivano fino a questo livello, sono moooolto basiche.
Queste righe sono parte di un programma che gestisce il protocollo sACN con arduino.
Non è un mio programma, ma sto cercando di adattarlo alle mie esigenze.
Ho apportato parecchie modifiche ma questa non riesco a risolverla.
Ho ho questa definizione all'inizio del codice
#define ARTNET_NODE_NAME "XNet2-ArtNet/sACN > #" // definisce il nome dell'interfaccia che non cambia mai
appena dopo, seguendo il listato ho questa istruzione in cui leggo il valore di universo che posso impostare di volta in volta, via pagina web
byte intU = EEPROM.read(533); // legge da eeprom il numero di universo
intU è un valore numerico da 1 a 16.
tramite programma esterno quando mando una certa istruzione all'interfaccia, quessta mi risponde con il contenuto di ARTNET_NODE_NAME, che però ora è fisso a "XNet2-ArtNet/sACN > #"
Mettiamo che una volta partito il programma ed impostato intU via web , intU sia 1.
avrei la necessita di far si che , durante il codice, quando viene richiamato ARTNET_NODE_NAME il suo contenuto sia "XNet2-ArtNet/sACN > #1" .
In pratica accodo al contenuto iniziale il valore di intU
Ho provato ad usare, molto ignorantemente gli operatori di concatenameto stringhe...ma ovviamente l'IDE mi dice che non va bene.
Qualcuno puo darmi qualche suggerimento pratico?
Grazie anticipate e scusate l'ignoranza.
Mario
COSA hai provato ad usare ... gli operatori della classe String o le funzioni che si trovano in <string.h> e che ti permettono il concatenamento di stringhe classiche del 'C'?
Perché, con quest'ultimi, non ci dovrebbe essere problema a creare una stringa (classica del 'C') come vuoi tu ...
come dice @gpb01 bisogna vedere cosa hai usato, comunque io trasformerei la #define in una dichiarazione di stringa (C string, NULL terminated) di lunghezza adeguata a contenere ANCHE il carattere aggiuntivo che ti serve, ma terminata un carattere prima
e poi dopo la lettura metto a posto il (pen) ultimo carattere
attenzione a un possibile problema invisibile: tu leggi da EEprom un intero, ma userai un carattere
se ti è chiaro proseguiamo, altrimenti dobbiamo chiarire prima la differenza che esiste tra "0", '0', 0 e NULL
Grazie a tutti per i replay.
Per concatenamenti era =+ e pure & ma già pensavo che non andassero bene.
Per il discorso eeprom ..si,leggo un intero da eeprom e poi quando la visualizzo nella pagina web ,con HTML(uso println per creare la pagina html ), la inserisco come intU.
Ignorantemente pensavo bastasse "concatenare"...un po' come si fa in VB,ma qui mi sono scontrato con le mia poca esperienza in c.
Crea una stringa classica del C (buf) abbastanza grande per contenere il dato, ed usa snprintf() come se stampassi non su monitor seriale ma dentro a quella stringa (buf)
Grazie ragazzi.
Probabilmente la "DEFINE" è trattata in maniera complessa all'interno della libreria a cui si appoggia.
Ho provato ambe due le soluzione e quella proposta da Maurotec si è rilevata efficace.
#define ARTNET_NODE_NAME "XNet2-ArtNet/sACN > #"
const byte g_lenBuff = strlen(ARTNET_NODE_NAME) + 3;
char g_buff[g_lenBuff];
//......etc etc...
sprintf(g_buff, "%s%02u", ARTNET_NODE_NAME, intU);
...(altro codice )...>>> setNodeName(g_buff);// risponde ad artnet poll con short e universo
Un altro mattoncino di conoscenza nel mio piccolo bagaglio ignorante.
Buona salute a tutti e grazie per il supporto