Go Down

Topic: array di stringhe come parametro di una funzione (Read 1 time) previous topic - next topic

ezanchet

Nov 19, 2013, 06:51 pm Last Edit: Nov 19, 2013, 08:43 pm by ezanchet Reason: 1
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.

Code: [Select]

// 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.

Code: [Select]

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

nid69ita

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:
Code: [Select]
String *paths[numberOfSlashes];
Ma un array di puntatori a oggetti String.  Ogni elemento può puntare una String. Ogni elemento NON è una String.
my name is IGOR, not AIGOR

ezanchet

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.

nid69ita

#3
Nov 19, 2013, 09:45 pm Last Edit: Nov 19, 2013, 10:09 pm by nid69ita Reason: 1
Ripeto,  con quell'asterisco, NON è un vettore di String.
Code: [Select]
String * paths[numberOfSlashes];
Toglilo e risulterà cosi:
Code: [Select]
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:
Code: [Select]
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:
Code: [Select]
void parseUrlSegments(String url, String * paths, int numberOfSlashes) {

Ora a me compila quella funzione, non sò se poi il resto è giusto.
my name is IGOR, not AIGOR

testato

ecco, ad esempio di queste cose non so nulla  :smiley-yell:
(vale come iscrizione)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

ezanchet

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 :-)

Go Up