LINUX.ORG.RU

C++ Криво работает вывод в файл

 ,


0

1

Доброго времени суток!

Есть 2 функции:

static char Time[10];

char* getTime()
{ //функция возвращает форматированное время
	bzero(Time, 10);
	time_t seconds = time(NULL);
	tm* timeinfo = localtime(&seconds);
	strncpy(Time,asctime(timeinfo)+11,9);
	return Time;
}

void WriteLog(const char* str, ...)
{
    FILE * lf;
    lf=fopen(LOG_FILE,"a");
    fprintf(lf, str); //печатаем в файл
    fclose(lf);
}

Используются они так: WriteLog("%s [DAEMON] Started, %d\n", getTime(), 125);

А в файл приходит следующее: /*кракозябры*/[DAEMON] Started, 1088

Косяк однозначно в fprintf и использовании функции от нескольких аргументов, но я пока хз, как поправить его.

★★

Ну во первых это же сишка, а не C++
И где разбор переменного числа аргументов?

FIL ★★★★
()
Ответ на: комментарий от FIL

Так а если мне все эти параметры надо впихнуть потом в другую функцию от переменного числа аргументов (в данном случае fprintf), то как мне их передавать? Ок, при помощи va_list и прочего, я могу пересчитать эти параметры, загнать в структуру, но передать-то ее в fprintf как? Через reinterpret_cast?

aido ★★
() автор топика

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

сделай свой синтаксис файла и печатай и считывай по разметке-в разы лучший путь

anonymous
()
Ответ на: комментарий от FIL

В такой реализации

void WriteLog(const char* format, ...)
{
	FILE * lf;
	lf=fopen(LOG_FILE,"a");
	
	va_list args;
	va_start (args, format);
    fprintf(lf, format, args); //печатаем в файл
    va_end (args);
    fclose(lf);
}

Вывод функции WriteLog("%s [DAEMON] Started, %d\n", getTime(), 125); таков: [DAEMON] Started, 1088

aido ★★
() автор топика

и при чем тут C++?

asaw ★★★★★
()

опять перепись дебилов, у которых в c++ отсутствует printf

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.