2012-04-30 18 views
8

¿Cómo se transfiere una matriz de caracteres a una función?Al pasar la matriz de caracteres a una función

declaraciones

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

llamada de función

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

y Error "main.cpp", línea 86: Error: argumento formal 1 de tipo char en llamada a Mail :: putAddress (char, char, char, char) se está pasando char *.

Respuesta

10

Su función debe ser:

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

impresionante, pero ahora se dice que putAddress necesita un prototipo –

+0

Es necesario prototipo de su función. __void putAddress (char *, char *, char *, char *); __ coloca esta línea después de ** usando namespace std ** – Nabin

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

pasa las cadenas (arrays de caracteres) como un puntero al primer carácter de la matriz:

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

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

    something(somestring); 

    return 0; 
} 

Debido a que las matrices decaen automáticamente a punteros cuando se pasa a una función, todo lo que tiene que hacer es pasar la matriz de caracteres y funciona. Así que en su ejemplo:

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

Es necesario pasar punteros a char

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

A continuación, hay que tener cuidado se conoce el tamaño de cada variedad por lo que no lo hace el índice fuera de la final, en su caso todos ellos son 64.

4

El compilador le está diciendo allí mismo ... Se pasa como char*. Entonces use char* o char ar[].

2

para corregir su código:

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

pero sigue siendo malo. Las matrices decaen a punteros, por eso se compilará, pero dará como resultado un error si los argumentos no tienen terminación nula. También debe pasar el tamaño si elige este enfoque.

Sin embargo, ya que este es C++ y no en C, le sugiero que utilice std::string lugar:

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

Usted puede pasar una matriz de 2 maneras:

(1) Convencional C-estilo :
Aquí pasan por la dirección y recibir usando un puntero

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

(2) C++ pasan por referencia:
se pasa la matriz por referencia con la especificación de tamaño:

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

Esto le ayuda a obtener la matriz de tamaño enseguida correcta (puntero no está permitido). Esto se puede hacer más sofisticado usando template también.

También puede repetir la opción de usar std::string, que hará una copia de toda la matriz y la administrará como una variable automática.

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

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

     return; 
} 

Ha olvidado poner la paranthesis, Póngalos como en el código anterior.

0

El error del compilador indica que fromName es de hecho un puntero al (primer elemento de) fromName array. Esta es solo sintaxis C++ (y simple C).

Para pasar una matriz de caracteres a una función, debe hacer lo que está haciendo actualmente, es decir, pasar un puntero al (primer elemento de) la matriz.

Así que todo lo que tiene que hacer es cambiar

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

a

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

PS: Su próximo problema es saber (haciendo putAddress consciente de) la longitud de cada matriz. Si estos son fijos, no tienes ningún problema.

Cuestiones relacionadas