2012-04-30 16 views
8

Come si passa un array di caratteri in una funzione.Passaggio di un array di caratteri in una funzione

dichiarazioni

char fromName[64]; 
char fromStreet[64]; 
char fromSuburb[64]; 
char fromCountry[64]; 

chiamata di funzione

Trans[i]->putAddress(fromName, fromStreet, fromSuburb, fromCountry); 

prototipo

void putAddress(char,char,char,char); 

function  
void putAddress(char fName,char fStreet,char fSuburb,char fCountry){ 

     return; 
} 

ed errore "main.cpp", linea 86: Errore: argomento formale 1 di tipo char in call to Mail :: putAddress (char, char, char, char) viene passato char *.

risposta

10

La funzione dovrebbe essere:

void putAddress(char *,char *,char *,char *); 
+0

impressionante ma ora il suo dire che mettereAddress ha bisogno di un prototipo –

+0

Hai bisogno di prototipare la tua funzione. __void putAddress (char *, char *, char *, char *); __ metti questa riga dopo ** usando namespace std ** – Nabin

4
void putAddress(char* array){ 
    //use array as usual 
} 
4

Si passa stringhe (array di caratteri) come un puntatore al primo carattere della matrice:

void something(char *str) { /* ... */ } 

int main(int argc, char **argv) { 
    char somestring[] = "Hell World!\n"; 

    something(somestring); 

    return 0; 
} 

Poiché gli array decadono automaticamente i puntatori quando passano a una funzione tutto ciò che devi fare è passare l'array di caratteri e funziona. Quindi nel tuo esempio:

void putAddress(char*, char*, char*, char*); 
8

È necessario passare puntatori a char

void putAddress(char* fName,char* fStreet,char* fSuburb,char* fCountry); 

È quindi necessario fare attenzione si conosce la dimensione di ciascun array in modo da non lo fai indice fuori alla fine, in il tuo caso sono tutti 64.

4

Il compilatore ti sta dicendo proprio lì ... È passato come char*. Quindi utilizzare char* o char ar[].

2

Per correggere il codice:

void putAddress(char*,char*,char*,char*); 

ma è ancora sbagliato. Array decadono ai puntatori, è per questo che verrà compilato, ma genererà un errore se gli argomenti non sono terminati con null. Si dovrebbe anche passare la taglia se si sceglie questo approccio.

Tuttavia, dal momento che questo è il C++ e non C, vi suggerisco di utilizzare std::string invece:

void putAddress(const std::string&,const std::string&,const std::string&,const std::string&); 
3

È possibile passare una matrice in 2 modi:

(1) convenzionale C-style :
Qui si passa da indirizzo e ricevere usando un puntatore

void putAddress(char *,char *,char *,char *); 

(2) C++ passare di riferimento:
si passa la matrice per il riferimento con le specifiche dimensioni:

void putAddress(char (&a1)[64], char (&a2)[64],char (&a3)[64], char (&a4)[64]); 

Questo consente di ottenere l'array di dimensioni immediatamente corretto (puntatore non è consentito). Questo può essere reso più sofisticato usando anche template.

È anche possibile iterare l'opzione di utilizzo di std::string, che eseguirà una copia dell'intero array e lo gestirà come variabile automatica.

0
void putAddress(char[],char[],char[],char[]); 

function  
void putAddress(char fName[],char fStreet[],char fSuburb[],char fCountry[]){ 

     return; 
} 

Hai dimenticato di mettere la parabrezza, inseriscile come nel codice sopra.

0

L'errore del compilatore fa sì che fromName sia effettivamente un puntatore al (primo elemento della) matrice fromName. Questa è solo sintassi C++ (e semplice C).

Per passare un array di caratteri a una funzione, è necessario eseguire ciò che si sta facendo in quel momento, ovvero passare un puntatore al (primo elemento della matrice).

Quindi, tutto quello che dovete fare è cambiare

void putAddress(char,char,char,char); 

a

void putAddress(char *, char *, char *, char *); 

PS: Il vostro prossimo problema è sapere (rendendo putAddress conoscenza) la lunghezza di ogni array. Se questi sono risolti, non hai problemi.

Problemi correlati