web-dev-qa-db-fra.com

Passer un tableau de caractères dans une fonction

Comment passez-vous un tableau de caractères dans une fonction. 

déclarations 

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

appel de fonction

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

prototype 

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

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

        return;
}

et Erreur "main.cpp", ligne 86: Erreur: L'argument formel 1 du type char dans l'appel à Mail :: putAddress (char, char, char, char) est passé à char *.

10
Daniel Del Core

Votre fonction devrait être:

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

Vous devez passer des pointeurs à char

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

Vous devez ensuite faire attention à connaître la taille de chaque tableau afin de ne pas indexer à la fin. Dans votre cas, ils sont tous de 64.

9
EdChum

Vous pouvez passer un tableau de 2 manières:

(1) C-style conventionnel:
Ici vous passez par adresse et recevez en utilisant un pointeur

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

(2) Passage C++ par référence:
Vous transmettez le tableau par référence avec la spécification de taille:

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

Cela vous aide à obtenir immédiatement la taille du tableau (le pointeur n'est pas autorisé). Ceci peut être rendu plus sophistiqué en utilisant template également.

Vous pouvez également utiliser l'option std::string pour effectuer une copie de l'ensemble du tableau et le gérer comme une variable automatique.

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

Vous passez des chaînes (tableaux de caractères) en tant que pointeur sur le premier caractère du tableau:

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

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

    something(somestring);

    return 0;
}

Comme les tableaux se désintègrent automatiquement en pointeurs lorsqu'ils sont transmis à une fonction, il vous suffit de transmettre le tableau de caractères et cela fonctionne. Donc dans votre exemple:

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

Le compilateur vous dit juste là ... Il est passé comme char*. Donc, utilisez soit char* ou char ar[].

4
Jonathon Reinhart

Pour corriger votre code:

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

mais c'est toujours faux. Les tableaux se désintègrent en pointeurs, c'est pourquoi ils compileront, mais entraîneront une erreur si les arguments ne sont pas terminés par null. Vous devez également indiquer la taille si vous choisissez cette approche.

Cependant , comme il s'agit de C++ et non de C, je vous suggère d'utiliser std::string à la place:

void putAddress(const std::string&,const std::string&,const std::string&,const std::string&);
2
Luchian Grigore
void putAddress(char[],char[],char[],char[]);

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

        return;
}

Vous avez oublié de mettre les parenthèses, mettez-les comme dans le code ci-dessus.

0
phantasmagoria

L'erreur du compilateur fait sence puisque fromName est en effet un pointeur sur le (premier élément du tableau) fromName. Ceci est juste la syntaxe C++ (et C simple). 

Afin de passer un tableau de caractères à une fonction, vous devez faire ce que vous êtes en train de faire, c'est-à-dire passer un pointeur sur le (premier élément du tableau).

Donc, tout ce que vous devez faire est de changer 

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

à

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

PS: Votre prochain problème est de savoir (en mettant putAddress au courant) la longueur de chaque tableau. Si ceux-ci sont résolus, vous n'avez aucun problème.

0
biril