web-dev-qa-db-ja.com

関数に文字配列を渡す

Char配列を関数に渡すにはどうすればよいですか。

宣言

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

関数呼び出し

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

プロトタイプ

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

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

        return;
}

エラー「main.cpp」、86行目:エラー:Mail :: putAddress(char、char、char、char)の呼び出しでchar型の仮引数1にchar *が渡されています。

10
Daniel Del Core

関数は次のようになります。

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

ポインタをcharに渡す必要があります

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

次に、すべての配列が64である場合、最後からインデックスを付けないように、各配列のサイズを把握するように注意する必要があります。

9
EdChum

2つの方法で配列を渡すことができます。

(1)従来のCスタイル:
ここでは、アドレスを渡し、ポインタを使用して受信します

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

(2)参照渡しのC++:
サイズを指定して、配列を参照渡しします。

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

これは、配列サイズをすぐに正しく取得するのに役立ちます(ポインターは許可されていません)。これは、templateを使用してより洗練されたものにすることもできます。

std::stringを使用するオプションを繰り返すこともできます。これにより、配列全体のコピーが作成され、自動変数として管理されます。

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

文字列(文字の配列)を配列の最初の文字へのポインタとして渡します。

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

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

    something(somestring);

    return 0;
}

配列は関数に渡されると自動的にポインタに減衰するため、文字配列を渡すだけで機能します。だからあなたの例では:

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

コンパイラはあなたにすぐそこに言っています... char*。したがって、どちらかを使用してくださいchar*またはchar ar[]

4

コードを修正するには:

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

しかし、それはまだ間違っています。配列はポインタに合わせて減衰するため、コンパイルされますが、引数がnullで終了していない場合はエラーになります。この方法を選択する場合は、サイズも渡す必要があります。

ただし、これはC++でCではないため、代わりにstd::stringを使用することをお勧めします。

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

括弧を置くのを忘れたので、上記のコードのように括弧を入れてください。

0
phantasmagoria

FromNameは確かにfromName配列(の最初の要素)へのポインターであるため、コンパイラーのエラーが発生します。これは単なるC++(およびプレーンC)構文です。

Char配列を関数に渡すには、現在行っていることを行う必要があります。つまり、ポインタを(の最初の要素)配列に渡します。

だからあなたがしなければならないすべては変更です

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

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

PS:次の問題は、各配列の長さを知る(putAddressを認識させる)ことです。これらが修正されている場合は問題ありません。

0
biril