Problema gestione variabili e memoria

Probabilmente sbaglio qualcosa di fondamentale, ma mi vien fuori na roba strana…

Mi son fatto una funzione che restituisce una stringa…

Se la chiamo associandola di volta in volta ad una determinata variabile, funziona… ma poi man mano che la chiamo più volòte nel codice mi va a sostituire anche i valori delle altre variabili create precedentemente… com,e se fosse solo un puhntatore in memoria e non una variabile a se…

No so se sono stato chioaro…

Vi posto il codice…


void setup(){
Serial.begin(9600);
Serial.println(“START”);
}

void loop(){

char* stringa_1 = find_tag("<data cmd=“Ciao”>", “cmd”);
Serial.println(stringa_1);
char* stringa_2 = find_tag("<data cmd=“Come”>", “cmd”);
Serial.println(stringa_2);
char* stringa_3 = find_tag("<data cmd=“Stai”>", “cmd”);
Serial.println(stringa_3);
Serial.println(stringa_1);
Serial.println(stringa_2);
Serial.println(stringa_3);
delay(2000);
}

char* my_func(char* in){
char str[10];
char string[10];
strcpy (str,"X ");
strcat (str,in); // Aggiungo al TAG cercato i caratteri di apertura
Serial.print(str);
for(int i=0;i<=3;i++){
string = str*;*
* }*
* return string;*
}
char* find_tag(char* XML, char* TAG){
* int dim = 0; // Variabile che conta i caratteri del TAG*
* int buffer_tmp = 128; // Dimensione del buffer per il valore del TAG*
* char string_tmp[buffer_tmp]; // Dimensiono il buffer con il numero massimo di caratteri leggibili*
* memset(string_tmp,’\0’,buffer_tmp); // Pulisco il buffer con valori NULL*
* char tag[128]; // Variabile che conterrà il nopme copmpleto del TAG da cercare*
* strcpy (tag,TAG);
strcat (tag,"=""); // Aggiungo al TAG cercato i caratteri di apertura
char ptr = strstr(XML, _tag); // Individuo il tag
_
ptr = strstr(ptr, “”"); // Individuo il carattere di apertura da cui parte il TAG

* for(int i=1;i<=strlen(ptr);i++){*
if(ptr*==’"’){*

* // Se trovo il carattere di chiusura TAG esco dal ciclo for*
* break;*
* }else{*
* dim++; // Incremento la dimensione della variabile che conterrà il TAG*
* }*
* }*
* for(int i=0;i<=dim-1;i++){*
string_tmp = ptr[i+1]; // Copio nella stringa i singolo caratteri del TAG trovato
* }*
* return string_tmp; // Ritorna indietro la stringa trovata*
}
**************
In pratica come Output mi da questo :
START
Ciao → 1 chiamata
Come → 2 chiamata
Stai → 3 chiamata
Stai → Ora la variabile stringa_1 contiene lo stesso valore della stringa_3 chiamata x ultima
Stai → Ora la variabile stringa_2 contiene lo stesso valore della stringa_3 chiamata x ultima
Stai
Che senso ha ? Si può evitare questa cosa ?
Marco

Nessuno che sa come risolvere ?

Ciao, char* esprime, in C, proprio un puntatore. Quindi non c'è da stupirsi del comportamento. Inoltre tieni conto che la memoria di Arduino è molto limitata; o meglio... è limitata se inizi a fare calcoli pesantemente e gestione di stringhe (come stai facendo tu) perchè non è nato per fare questo....

L'elaborazione di stringhe non è proprio il suo lavoro :P

Grazie mille per la risposta.. ma io non è che debba fare molto lavoro sulle stringhe.. solo trovare quello che mi serve e poi confrontarlo..

La funziona che ho fatto anche se molto semplice sembra funzionare, però ha questo inconveniente che vorrei risolvere..

Hai idea di come far ritornare da una funzione una stringa ed associarla ad una variabile che chiama la funzione senza che questa diventi solo un puntatore ?

Grazie ancora

Marco

Penso che non sia possibile in questo linguaggio ma non lo dico con certezza assoluta. Se qualcuno ha maggiore esperienza in merito può tranquillamente confutare la mia risposta. L'unica cosa che so è che quelle pochissime volte che ho avuto a che fare con stringhe in arduino o ho cercato info su web ho sempre visto puntatori...