我试图编写一个打印本地时间加上给定字符串的函数,并在末尾添加换行符以便于阅读。
这是当前的代码:
void errLog(const std::string errorString)
{
FILE* errorLog;
fopen_s(&errorLog, "ErrorLog.txt", "ab+");
time_t rawTime;
time (&rawTime);
struct tm errorTime;
localtime_s(&errorTime, &rawTime);
char timeString[20];
strftime(timeString, 20, "%d-%m-%Y %H:%M:%S", &errorTime);
fprintf(errorLog, "%s Error: %s\n", timeString, errorString);
fclose(errorLog);
}
输出是我在发布模式下所期待的输出。在工作程序上,ErrorLog.txt按照预期使用了这一新行:
16-09-2014 10:58:45 Error: devFont.ttf load failed
但是在调试模式下,输出似乎采用了随机字符串。这是两个连续的输出,随机而没有明显的解释:
16-09-2014 11:13:57 Error: ΘυB
16-09-2014 11:14:09 Error: Μϊ;
该函数在调用时被赋予硬编码字符串,因此errLog的输入完全相同。
答案 0 :(得分:1)
您需要使用c_str()
来访问要传递给fprintf的字符指针:
fprintf(errorLog, "%s Error: %s\n", timeString, errorString.c_str());
在大多数情况下,接受您的参数作为const引用const std::string& errorString
通常也比在不需要时强制构造参数的新字符串更有效。