私はCにかなり慣れていないので、文字列を受け取り、現在の日付と時刻を前に付けて文字列を返す関数を書きたいと思います。いくつかのログ機能に必要ですが、出力ストリームに直接出力したくありません。
#define TIME_FORMAT "[%Y-%m-%d %H:%M:%S] "
char *logMsg(char *msg) {
char timeStr[23];
time_t tms;
struct tm *localTime;
tms = time(NULL);
localTime = localtime(&tms);
strftime(timeStr, sizeof(timeStr), TIME_FORMAT, localTime);
int lenMsg = strlen(msg);
int newLen = sizeof(timeStr) + lenMsg + 1;
char *newStr;
newStr = (char *) calloc(newLen,sizeof(char));
strcat(newStr,timeStr);
strcat(newStr,msg);
return newStr;
}
この関数を呼び出すたびに新しいメモリを割り当てるので、これが非常に悪い考えであることはわかっていますが、これは私が望む機能です。メッセージを事前定義された長さに制限したくありません。
アイデアやデザインパターンだけでも非常に役立ちます。どうもありがとう!