Pages: [1]   Go Down
Author Topic: Allocare dinamicamente un vettore di stringhe  (Read 1153 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 2
Posts: 66
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve,
nel mio sketch ho la necessità di leggere da uno specifico file sulla scheda SD delle stringhe scritte una per riga.
Ovviamente non ho alcun problema a estrapolare le stringhe dalla scheda, ma dovrei poi, in base al numero di stringhe estratte, riempire dinamicamente un vettore fino ad ottenere un vettore come quello mostrato qui sotto
char* stringhe_estratte[] = {"0011324862","0013530444","0011308547","0006105341"};

Purtroppo non posso utilizzare l'oggetto String per altri motivi legati alla memoria...

Come posso procedere all'allocazione dinamica di memoria per riempire il vettore sopra mostratovi?
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10461
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

stai cercando la realloc, però non credo funzioni sugli array, devi trasformarlo in un puntatore, quindi il tuo stringhe_estratte non è più un array di puntatori a char, ma un puntatore a puntatori a char:

char** stringhe_estratte = {"0011324862","0013530444","0011308547","0006105341"};

se ti serve un elemento in più fai
Code:
int *temp = realloc(stringhe_estratte, sizeof(char*)*(numeroElementiDiStringhe_estratte+1));
if ( temp != NULL ) //realloc was successful
{
   stringhe_estratte= temp;
}
else //there was an error
{
   free(stringhe_estratte);
   Serial.println("Error allocating memory!");
}

dove
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Jr. Member
**
Karma: 2
Posts: 66
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao lesto,
per prima cosa grazie della risposta...
non ho ben capito il codice da te postato: se ad esempio avessi un vettore di caratteri chiamato 'nuovo_estratto'  contenente la stringa estratta dal file nell SD, come dovrei inglobarlo nel codice da te postato, al fine di inserire 'nuovo_estratto' nella sequenza 'stringhe_estratte'?
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10461
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
char **temp = realloc(stringhe_estratte, sizeof(char*)*(numeroElementiDiStringheEstratte+1));
if ( temp != NULL ) //realloc was successful
{
   stringhe_estratte= temp;
   stringhe_estratte[numeroElementiDiStringheEstratte]=nuovo_estratto;
   numeroElementiDiStringheEstratte++;
}
else //there was an error with realloc
{
   Serial.println("Reallocating memory error! Falling back to malloc");
   temp = malloc(stringhe_estratte, sizeof(char*)*(numeroElementiDiStringheEstratte+1));

   if ( temp != NULL ) //realloc was successful
   {
      for (int i=0;i < numeroElementiDiStringheEstratte;i++){
          temp[i] = stringhe_estratte[i];
      }
      char **temp2 = stringhe_estratte;
      stringhe_estratte= temp;
      free(temp2);
      stringhe_estratte[numeroElementiDiStringheEstratte]=nuovo_estratto;
      numeroElementiDiStringheEstratte++;
   }
   else //there was an error with realloc
   {
      Serial.println("Error allocating memory! Aho, nun c'è sta proprio abbastanza spazio");
   }
}
« Last Edit: September 20, 2012, 07:20:16 am by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 44
Posts: 1383
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho notato che le stringhe sono tutte numeriche.

Se ha problemi di spazio, non ti converrebbe trattarle come numeri interi?

Ettore Massimo Albani
Logged

Offline Offline
Jr. Member
**
Karma: 2
Posts: 66
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Purtroppo dovrò trattare analogamente anche un vettore di caratteri alfabetici...
Logged

Pages: [1]   Go Up
Jump to: