2013-10-13 3 views
2

Я пытаюсь форматировать мой вывод KeyLog так оно показывает время:не может писать Int в файл с помощью FWRITE

 t = time(0); 
     now = localtime(&t); 


     if(now->tm_min != prevM && now->tm_hour != prevH) 
     { 
      prevM = now->tm_min; 
      prevH = now->tm_hour; 

      fwrite("[", 1, sizeof(WCHAR), keylog); 
      fwrite(&prevH, 1, sizeof(int), keylog); 
      fwrite("]", 1, sizeof(WCHAR), keylog); 
      fwrite(" ", 1, sizeof(WCHAR), keylog); 
      fflush(keylog); 
     } 

но вместо читаемого числа я получаю «[DLE NUL]» написано в моем файле , где DLENUL - знак вопроса.

Как я могу написать читаемый номер?

+0

Найдите [fprintf] (http://www.cplusplus.com/reference/cstdio/fprintf/). – scaryrawr

ответ

3

С fwrite вы храните двоичное представление. Если вы хотите сохранить текстовое представление, вы можете использовать fprintf.

3

Вместо

fwrite(&prevH, 1, sizeof(int), keylog); 

попробовать

fprintf(keylog, "%d", prevH); 
5

Используйте fprintf, как другие, также предлагая.

Причина:
fwrite обычно используется для записи в двоичных файлах для записи блоков одного и того же типа данных.

Данные, которые вы пишете, выглядят как символьная строка, вы можете использовать fprintf со следующим синтаксисом для записи ваших полных данных в файл.

fprintf(keylog, "[%d] ", prevH); 

Кажется, вы пишете широкие символы (как вы используете wchar). Вы можете использовать различные спецификации формата соответственно.

+0

'fprintf (keylog," [% d:% d] ", prevH, prevM);' решил проблему, но теперь, когда я пишу, чтобы записать то, что я получил с клавиатуры 'fwrite (& outputChar, 1, sizeof (WCHAR), keylog); ' в моем выпуске я получаю символ вместе с значком NULL, потому что это WCHAR – legionar

+0

Есть ли способ исправить это? Я пробовал с разными спецификаторами, но мой вывод всегда напоминает «[17:13] tNULLeNULLsNULLtNULL». Если я пишу символы вместо wchars, все в порядке, но мне нужны wchars. – legionar

+1

Вы действительно хотите wchars * в файле *? Если это так, используйте 'fwprintf' и друзей (и вам также нужно открыть файл по-другому). Но я подозреваю, что вы вообще не должны * использовать wchars * вообще *. Функция широкоформатного/многобайтового символа ISO C была разработана в то время, когда мы не выяснили, как правильно это сделать, и это показывает; вы почти всегда лучше используете UTF-8 в узких строках, либо вручную, либо с помощью сторонней библиотеки (например, [ICU] (http://www.icu-project.org/)), дизайн которой равен к истинной сложности работы. – zwol

1

Как уже было предложено другими, вы можете использовать fprintf при записи текста в файл.

Более конкретно, при написании WCHARs вы можете использовать:

fwprintf(file, L"%c\n",outputChar); 

или:

fprintf(file, "%lc", outputChar); 

Для получения дополнительной информации, смотрите документацию по функции: http://www.cplusplus.com/reference/cwchar/fwprintf/

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