私は現在の日付と時刻を出力する必要のある簡単なログ機能を持っています。私はchar *
を返す関数の中でそれをやっています。 char *
をfprintf()
に設定しようとすると、文字列がファイルに出力されません。なぜですか?ここでfprintfはconst char *をファイルに出力しません
は日時を構築する機能である:ここでは
char * UT::CurrentDateTime()
{
char buffer [50];
time_t t = time(0); // get time now
struct tm * now = localtime(& t);
int n=sprintf(buffer, "%d:%d:%d %d:%d:%d:", (now->tm_year + 1900),
(now->tm_mon + 1), now->tm_mday, now->tm_hour, now->tm_min,
now->tm_sec);
return buffer;
}
はログです:
const char *time =__TIME__; // compilation time
char *currentTime = UT::CurrentDateTime(); // it's a static method; also tried to set it to const
fprintf(fp, "%s %s %s %s %s %d %s\n", __TIME__, pType, __DATE__,
currentTime, pFileName, lineNo, pMsg.c_str());
fflush(fp);
すべてのものは/時間char *
日を除いて印刷されます。 なぜですか?
C++コンパイラでCコードを書くのではなく、C++を_embrace_する必要があります。書式設定された出力を文字列(およびファイル出力)にする方法はC++の方が優れています(例えばC++の方が良い) - 例えば 'stringstream'を参照してください。 – paxdiablo
'struct tm'から日付/時刻の値をフォーマットするには' strftime() 'を使うことを検討してください。また、 'const char * time'変数は使用されておらず、有益ではありません。ログメッセージごとにコンパイル日時を記録することはめったにありません。製品のどのバージョンをログに書き込んでいるかを記録するために、ログを開いたときに一度行うことがあります。 –