Allocare dinamicamente un vettore di stringhe

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?

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

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

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'?

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");
   }
}

Ho notato che le stringhe sono tutte numeriche.

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

Ettore Massimo Albani

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