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 *が渡されています。
関数は次のようになります。
void putAddress(char *,char *,char *,char *);
ポインタをcharに渡す必要があります
void putAddress(char* fName,char* fStreet,char* fSuburb,char* fCountry);
次に、すべての配列が64である場合、最後からインデックスを付けないように、各配列のサイズを把握するように注意する必要があります。
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
を使用するオプションを繰り返すこともできます。これにより、配列全体のコピーが作成され、自動変数として管理されます。
void putAddress(char* array){
//use array as usual
}
文字列(文字の配列)を配列の最初の文字へのポインタとして渡します。
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*);
コンパイラはあなたにすぐそこに言っています... char*
。したがって、どちらかを使用してくださいchar*
またはchar ar[]
。
コードを修正するには:
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&);
void putAddress(char[],char[],char[],char[]);
function
void putAddress(char fName[],char fStreet[],char fSuburb[],char fCountry[]){
return;
}
括弧を置くのを忘れたので、上記のコードのように括弧を入れてください。
FromNameは確かにfromName配列(の最初の要素)へのポインターであるため、コンパイラーのエラーが発生します。これは単なるC++(およびプレーンC)構文です。
Char配列を関数に渡すには、現在行っていることを行う必要があります。つまり、ポインタを(の最初の要素)配列に渡します。
だからあなたがしなければならないすべては変更です
void putAddress(char,char,char,char);
に
void putAddress(char *, char *, char *, char *);
PS:次の問題は、各配列の長さを知る(putAddressを認識させる)ことです。これらが修正されている場合は問題ありません。