2016-04-11 2 views
-3

Я пытаюсь создать файл журнала, который регистрирует все запросы пользователей с отметкой времени. Вот как я строю его:Преобразование из WORD в char *

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

Однако st.wYear возвращает WORD и зЬгсру будет принимать только символ *. Мне нужен символ char *, потому что я планирую использовать fputs для привязки к концу создаваемого файла.

Каковы временные решения, которые я могу использовать, или как правильно преобразовать WORD в char *?

+0

(char *) st.wYear –

+0

Я пробовал это делать, но это заканчивает сбой программы на этой линии. Поэтому я подумал, что, вероятно, это был не путь. – aurora91

+0

Похоже, вы на самом деле спрашиваете, как форматировать число в виде строки. – SLaks

ответ

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(); 
+0

Кажется, делать то, что я хочу, спасибо. – aurora91

0

Обращаясь к первому вопросу непосредственно, путь к нему будет состоять в том, чтобы просто сделать year_str = std::to_string(st.wYear) и работать с этим.

Если вам действительно нужно это как char* то вы можете получить его, делая year_str.c_str()

+0

'std :: to_string()' доступен только на C++ 11 и более поздних версиях. –

0

Использование sprintf() с %d в качестве строки формата, например,

char logMessage[1000]; 
SYSTEMTIME st; 
GetSystemTime(&st); 
sprintf(logMessage, "Year: %d", st.wYear); 

logMessage не содержит Year: 2016

Смежные вопросы