我正在尝试创建一个日志文件,该文件使用时间戳记记所有用户请求。以下是我如何构建它:
char logMessage [1000];
SYSTEMTIME st;
GetSystemTime(&st);
strcpy(logMessage, st.wYear);
但是,st.wYear返回一个WORD,而strcpy只会获取char *。 我需要char *因为我计划使用fputs来处理我创建的文件的末尾。
我可以使用哪些解决方法或如何将WORD正确转换为char *?
答案 0 :(得分:3)
您需要将数字WORD
值格式化为字符缓冲区,例如:
SYSTEMTIME st;
GetSystemTime(&st);
char logMessage [1000];
sprintf(logMessage, "%hu", st.wYear);
...
FILE *fp = fopen("file.log", "a");
fputs(logMessage, fp);
fclose(fp);
或者:
SYSTEMTIME st;
GetSystemTime(&st);
FILE *fp = fopen("file.log", "a");
fprintf(fp, "%hu", st.wYear);
...
fclose(fp);
或者,使用C ++而不是C:
#include <string>
#include <sstream>
#include <fstream>
SYSTEMTIME st;
GetSystemTime(&st);
std::ostringstream logMessage;
logMessage << st.wYear;
...
std::ofstream ofs("file.log", std::ios_base::app);
ofs << logMessage.str();
ofs.close();
答案 1 :(得分:0)
直接解决标题问题,C++
方式就是简单地执行year_str = std::to_string(st.wYear)
并从中开始工作。
如果您确实需要char*
,那么您可以通过year_str.c_str()
答案 2 :(得分:0)
将sprintf()
与%d
一起用作格式字符串,例如
char logMessage[1000];
SYSTEMTIME st;
GetSystemTime(&st);
sprintf(logMessage, "Year: %d", st.wYear);
logMessage
不包含Year: 2016