2012-04-30 20 views
8

char配列を関数にどのように渡しますか?関数への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:エラー:char型の仮引数1でMail :: putAddress(char、char、char、char)の呼び出しがchar *に渡されています。

答えて

10

あなたの機能は次のようになります。

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

素晴らしいですが、今はputAddressにプロトタイプが必要だと言っています –

+0

あなたの関数をプロトタイプ化する必要があります。 __void putAddress(char *、char *、char *、char *); __この行は、namespace stdを使用して**後に置いてください。 – Nabin

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

あなたは、配列の最初の文字へのポインタとして文字列(文字の配列)を渡す:配列は自動的に減衰するので

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*); 
8

あなたは、その後に、あなたが最後にインデックスをオフにしないように、あなたは、各配列のサイズを知るに注意する必要があり

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

をchar型へのポインタを渡す必要がありますあなたのケースはすべて64です。

4

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

2

あなたのコード修正するには:

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

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

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

あなたは2通りの方法で配列を渡すことができます:

(1)従来のC-スタイルをしかし

、これはC++ではなくCであるため、私はあなたの代わりにstd::stringを使用することをお勧め:ここでは、アドレスを通過し、(2)ポインタ

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

を使用して受信
C++は参照渡し:
をあなたは、サイズ指定で参照することによって配列を渡す:

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

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

std::stringを使用すると、アレイ全体のコピーが作成され、自動変数として管理されます。

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

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

     return; 
} 

あなたは上記のコードのように、それらを置くことを忘れてしまった。

0

コンパイラのエラーは、fromNameが実際にfromName配列の(最初の要素への)ポインタであるためです。これはちょうどC++の構文です。

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

だから、あなたがする必要があるすべてはPS

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

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

を変更です:あなたの次の問題は(のputAddressを認識させる)各配列の長さを知ることです。これらが固定されても問題はありません。

関連する問題