2016-04-05 1 views
0

私はchar*を返す関数を持っています。このchar *は、他のプログラムによって消去または再利用されてはなりません。私はC++でmallocを使用しないことを知っていますが、あなたと私はnewを使ってメモリ内の領域を割り当てます。Cで標準のlibは返されたchar *変数を使用しませんか?

私が行う場合:戻ったときに、このスペースはもはやので、このバッファptrを返す現在の関数に帰属します

char buffer[100]; //I just sub'ed rbp at least 100bytes+allign 

は危険です。

結論として、私はなぜstdioと他のいくつかのlibsがcharポインタを返すことができるのだろうと思っていました。それらはmallocで割り当てられているか、スタックに入っていますか? の安全な文字配列を返すためにC(only)関数を実装するにはどうすればいいですか?

+3

彼らが何を指しているかによって異なります。あなたはどの機能を考えていますか?あなたはその機能に関するドキュメントを読んだことがありますか? – immibis

+0

は、ソケットfdからデータを受け取り、それを返す関数です。私が知っているのは、もし私が戻ってきたときにバッファーすることができたら、私は後で解放する必要がある。しかし、同じことをするのは面倒だということを知っています。だから、inet_net_ntop()はchar *(またはconst char *)を返します。私がそれを使うときは、フリーでも何でも気にしません。私はそれを使用して、私が終わったらそれは終わった。 inet_net_ntop()は内部的にmallocを使用しますか? – int3

+2

ポインタを返す関数のドキュメントは、そのポインタをどのように管理する必要があるかを(直接的または間接的に)指示する必要があります。すべての機能に対して単一の答えはありません。 –

答えて

2

Why don't you look at the documentation and find out?は、

返り値成功した

inet_net_ntop()(あなたはあなたのコンピュータ上man inet_net_ntopを実行することができ、これはあなたのシステムとは若干異なる場合がありますオンライン版です)戻りプレス。エラーの場合、NULLを返します。 およびエラー番号がエラーの原因を示すように設定されています。

presがパラメータの1つです。したがって、エラーがない限り、あなたが与えたのと同じポインタを返します。

+0

私はinet_net_ntopを意味しました。だから私はchar *を返す必要がある関数を持っているので、私はmallocを使い、使用していないときにそれを解放しなければならないのですか?それが唯一の方法ですか? – int3

+1

@ int3いいえ、そうではありません。ローカル変数でない限り、任意のものへのポインタを返すことができます。 – immibis

+0

どうすればmallocを使用せずに非ローカル変数を返すことができますか? – int3

関連する問題