3

変数の読み取り可能な表現を取得するためにctime関数を使用していtime_tます。ctime次のように宣言されます:

char *ctime (const time_t *timer);

そして、引数にcharポインターを渡さずに、結果のchar配列へのポインターを返すことがわかります。したがって、charバッファをどこにctime割り当て、誰がそれを破棄し、関数内にメモリを割り当てないmallocのか(もちろん、さまざまなものを除く)、混乱していると考えられます。

助言がありますか?

4

1 に答える 1

6

あなたが引用するリンクから:

この文字列を保持する配列は、静的に割り当てられ、ctime関数とasctime関数の両方で共有されます。これらの関数のいずれかが呼び出されるたびに、この配列のコンテンツが上書きされます

その配列は、プログラムが存続する限り存続しますが、だれも解放してはなりません。

POSIX 2008には、ctime_r再入可能(バッファーを渡す)の関数がありますが、CまたはC++では標準ではありません。

于 2012-05-13T11:16:29.710 に答える