12

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*に渡されています。

4

9 に答える 9

9

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

void putAddress(char *,char *,char *,char *);
于 2012-04-30T12:22:55.517 に答える
9

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

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

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

于 2012-04-30T12:23:20.830 に答える
8

配列は次の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。これにより、配列全体のコピーが作成され、自動変数として管理されます。

于 2012-04-30T12:25:37.683 に答える
5

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

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*);
于 2012-04-30T12:23:14.180 に答える
4
void putAddress(char* array){
    //use array as usual
}
于 2012-04-30T12:22:55.693 に答える
4

コンパイラはすぐそこにあなたに言っています...それはとして渡されchar*ます。したがって、またはのいずれchar*かを使用しますchar ar[]

于 2012-04-30T12:23:38.610 に答える
2

コードを修正するには:

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&);
于 2012-04-30T12:25:08.027 に答える
0
void putAddress(char[],char[],char[],char[]);

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

        return;
}

あなたはparanthesisを置くのを忘れました、上記のコードのようにそれらを置いてください。

于 2012-04-30T12:26:24.833 に答える
0

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

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

だからあなたがする必要があるのは変更することだけです

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

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

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

于 2012-04-30T12:28:53.070 に答える