2014-11-05 2 views
0

Возможно, глупая ошибка, которую я здесь делаю.C программирование, fprintf() не работает правильно

FILE *fp; 
    fp = fopen("test.txt", "a+"); 
    fprintf(fp, time_stamp(),"FLAG 1, Timestamp : %s\n"); 
    fclose(fp); 

Я получаю временную метку из функции Но Файл писать только временную метку, а не флаг Если удалить метку времени, пометка 1 печать. Но не собираться вместе. т.е.

Flag 1, Timestamp : 20141005141116 

Выход я получаю в test.txt как

20141005145640201410051456402014100514564020141005145640201410051456412014100514564120141 

Не будет новой строки и печати, как:

Flag 1, Timestamp : 20141005141116 
Flag 1, Timestamp : 20141005141117 
Flag 1, Timestamp : 20141005141118 

..... как тот

Решите этот вопрос

+0

Пожалуйста компилировать со всеми предупреждениями и отладочной информации ('Gcc -Wall -Wextra -g'). Вы получите предупреждение от компилятора, если используете [GCC] (http://gcc.gnu.org/) ... –

+0

где используется printf? – dhein

+0

@Zaibis: OP, вероятно, думает о 'fprintf' –

ответ

8

У вас есть аргументы fprintf() в неправильном порядке. Посмотрите на прототипе manual page «s:

int fprintf(FILE *stream, const char *format, ...); 

Очевидно, что строка форматирования приходит до вещи быть отформатирован (переменная часть ...).

Предполагая time_stamp() возвращает статическую строку, ваш код должен быть:

fprintf(fp, "FLAG 1, Timestamp : %s\n", time_stamp()); 
+0

fprintf («FLAG 1, временная метка:% s \ n», fp, timestamp()); Это? на самом деле делает c после долгого времени, следовательно ... основные проблемы –

+0

@anupam_on Uh no? Пожалуйста * посмотрите * на прототипе или код, который я вам дал в ответе выше. Сначала указатель файла, затем строку форматирования, затем форматированные вещи. – unwind

+0

+1. Это, возможно, самый приятный ответ, который я когда-либо видел. Кратко, по сути, и все соответствующие ссылки. – Joshpbarron

3

Аргументы fprintf() должно быть так:

fprintf(fp, "FLAG 1, Timestamp : %s\n", time_stamp()); 
Смежные вопросы