从WORD转换为char *

时间:2016-04-11 19:01:31

标签: c++

我正在尝试创建一个日志文件,该文件使用时间戳记记所有用户请求。以下是我如何构建它:

char logMessage [1000];
SYSTEMTIME st;
GetSystemTime(&st);
strcpy(logMessage, st.wYear);

但是,st.wYear返回一个WORD,而strcpy只会获取char *。 我需要char *因为我计划使用fputs来处理我创建的文件的末尾。

我可以使用哪些解决方法或如何将WORD正确转换为char *?

3 个答案:

答案 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