array di stringhe come parametro di una funzione

Ciao, sono alle prime armi con Arduino / C e non riesco a odificare un array di stringhe passate a una funzione.

ho una variabile String url che contiene l'indirizzo richiesto in GET.

// recupero numero di / presenti nella stringa
int numberOfSlashes = getNumberOfSlashes(url);

String *paths[numberOfSlashes];
        
parseUrlSegments(url, paths, numberOfSlashes);

Ho provato passando l'array paths per riferimento in modo da poterlo modificare dalla funzione.

void parseUrlSegments(String url, String *paths[], int numberOfSlashes) {
  for(int i = 0; i < numberOfSlashes; i++) {
    int indicePrimoSlash = url.indexOf('/');
    
    paths[i] = url.substring(0, indicePrimoSlash);
          
    url = url.substring(indicePrimoSlash + 1);
    }
}

l'errore che mi viene mostrato è:

ArduinoREST.ino: In function 'void parseUrlSegments(String, String**, int)':
ArduinoREST:122: error: cannot convert 'String' to 'String*' in assignment

Qualcuno saprebbe aiutarmi ?

Grazie

Il codice deve essere racchiuso negli appositi tag: [ code] codice xxx [ /code] (senza gli spazi) altrimenti non è leggibile.

Comunque questo NON è un array di String:

String *paths[numberOfSlashes];

Ma un array di puntatori a oggetti String. Ogni elemento può puntare una String. Ogni elemento NON è una String.

ho sistemato il codice, ora effettivamente è più leggigile.

sapresti dirmi come fare per modificare un'array di stringhe da dentro la mia funzione ? hai un esempio ?

grazie.

Ripeto, con quell'asterisco, NON è un vettore di String.

String * paths[numberOfSlashes];

Toglilo e risulterà cosi:

String paths[numberOfSlashes];

Poi la funzione, passandogli un vettore/array con le quadre, già dici che è un array, quindi ANCHE li quell'asterisco non serve:

void parseUrlSegments(String url, String paths[], int numberOfSlashes) {

Inoltre quando si passa un array come parametro, è come passarlo per referenza (puntatore di nascosto) e perciò gli elementi li puoi modificare.
In alternativa puoi anche scrivere così ma ti consiglio la precedente:

void parseUrlSegments(String url, String * paths, int numberOfSlashes) {

Ora a me compila quella funzione, non sò se poi il resto è giusto.

ecco, ad esempio di queste cose non so nulla :stuck_out_tongue_closed_eyes:
(vale come iscrizione)

Grazie, era così semplice e sono andato a perdermi con i puntatoi... non sapevo che passando un array a una funcione venisse passato per referenza.

Grazie ancora per l'aiuto, ora tutto funziona :slight_smile: