2012-05-06 5 views
2

こんにちは私は本当にこの周りに私の頭を得ることができません。私は基本的に、出力配列をパラメータとして渡すことによって、関数からchar配列を返そうとしています。ここで私はこれまで持っているものです。Cの参照でchar配列を渡します

機能:

int GetComputerName(char *name, char *ip_address){ 
    *name = "testing"; 
    return 0; 
} 

そして、それを呼び出す:

char comp_name[50]; 
GetComputerName(&comp_name, serverIP); 
printf("\n\n name: %s\n\n", comp_name); 

私は仕事としていますか見て切り替え、*を交換し、&試してみましたポインタと物事を読んでいますが、実際に起こっていることが起こっていると思うことは、2つの非常に異なることです。今は、私が始めたときよりも自分自身を混乱させてしまったと思います! lol

誰かが私を助けて、これを行う正しい方法が何かを説明できますか?事前に

感謝=)

答えて

11

この行:名前で指さCHARに "テスト" へのポインタを割り当てるよう

*name = "testing"; 

は、無効です。データをバッファにコピーする必要があります。 (オーバーフローを避けるために)

int GetComputerName(char *name, char *ip_address){ 
    strcpy(name,"testing"); 
    return 0; 
} 

またはより良い:

int GetComputerName(char *name, size_t buff_len, char *ip_address){ 
    strncpy(name,"testing", buff_len); 
    name[buff_len - 1] = '\0'; 
    return 0; 
} 

をし、それを呼び出す:それはあるべき働い

GetComputerName(comp_name, sizeof(comp_name), serverIP); 
+0

はいありがとう! :) strcpyは何をするのですか? 私はまだJavaとC#の周りに浮かんでいる1/2の頭を持っていると思いますが、これは私が過去に行ったことです! lol – geekman92

+1

'strcpy'は1つのバッファから別のバッファにac文字列をコピーしますが、より安全な関数は' strncpy'です。http://www.cplusplus.com/reference/clibrary/cstring/strncpy/ – MByD

+0

ありがとう私の理解を助ける! :)非常に良いと完全な答え! – geekman92

関連する問題