gcc 4.7.2
c89
こんにちは、
関数 GetCallRef(...) は、この 3 番目のパラメーターのバッファーへのポインターを想定しています。つまり、call_id は私のポインターです。ただし、call_id で返される文字列の長さはわかりません。この call_id はこの関数でのみ使用されるため、ローカル スコープしか持たないため、関数で返された call_id のみを使用します。
私の質問は次のとおりです。ポインタを宣言してそれを渡しても大丈夫ですか。
char *call_id = NULL;
または、非常に大きなサイズの配列を宣言する方が良いでしょう(大きなサイズが十分に大きいかどうかわからないため)
char call_id[1024]
実際の機能。
if(GetCallRef(crn, GET_CALLID, call_id) == 0) {
/* use the call id - not used outside of this function */
}
GetCallRef(...)
クローズされているため、実際の関数のソース コードはありません。
関数が内部的にそのバッファーに直接コピーされる可能性があるため、バッファーの方が優れていると思います。ただし、配列は関数の引数のポインターに分解され、この関数シグネチャの一部ではないため、サイズを渡していないため、長さはわずか 4 バイトになります。関数は配列の大きさをどのように認識しますか? できない。
ポインターを渡すと、文字列値が格納されているアドレスを割り当てることができます。つまり、それを返します。
call_id = call_reference_id;
すべてのドキュメントは、バッファーが呼び出し ID を格納するのに十分な大きさであるべきだと述べていますが、どのくらいの大きさであるべきかについては述べていません。
アドバイスありがとうございました。