我想从我的程序中自定义输出到文件。
void http_log(char* msg, ...)
{
char* prePend = "Date-Time: %s === ";//Prepended text
size_t len1 = strlen(prePend);
size_t len2 = strlen(msg);
char *s = malloc(len1 + len2 + 1); //The new string
memcpy(s, prePend, len1);
memcpy(s + len1, msg, len2 + 1); // includes terminating null
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
char *dateTime = asctime (timeinfo);//Get the current date time
dateTime[strlen(dateTime) - 1] = 0;//Take away the new line character
va_list args;
va_start( args, msg);
//I think the problem lies here...
fprintf( log_fd, s, dateTime, args);//Print it to the log file. log_fd is already created and opened.
printf(s, dateTime, args);//Prints to screen.
va_end( args);
free( s);
}
我想在http_log()的输出之前添加一些标准文本; (本例中的当前日期)。之后我想添加一些可自定义的文本,你传入http_log函数http_log(“这将在日期之后附加\ n”);.最后我希望能够使用%s,%d,%ld等(不知道它们被称为什么),如http_log(“连接IP地址%s \ n”,IP_addres); < / p>
我的问题是我传递的值不会打印出来。在我合并值之前,我应该尝试将字符串与值组合在一起吗? 或者我的代码还有其他一些问题吗?
我很感激所有的帮助&amp;&amp; || *指针
一些C乐趣:)
答案 0 :(得分:2)
您无法将va_list args
传递给printf()
,而是传递给vprintf()
。
并且您无法结合其他参数&#34; dateTime
与va_list
,
所以你必须单独打印它们:
void http_log(char* msg, ...)
{
char *dateTime = ...;
fprintf(log_fd, "Date-Time: %s === ", dateTime);
printf("Date-Time: %s === ", dateTime);
va_list args;
va_start(args, msg);
vfprintf(log_fd, msg, args);
va_end( args);
va_start(args, msg);
vprintf(msg, args);
va_end( args);
}
答案 1 :(得分:0)
我只有一次致电printf()
,我才认为这是可能的。您的消息和参数必须传递到打印函数的v
版本,vfprintf()
。您必须将日期(或您想在http_log()
内生成的任何内容)传递给打印函数的非v
版本。