#include <stdio.h>
#include <stdarg.h>
格式化输入:
int scanf(const char *fmt, ...);
int sscanf(const char *buf, const char *fmt, ...);
int fscanf(FILE *fp, const char *fmt, ...);
int vscanf(const char *fmt, va_list arg);
int vsscanf(const char *buf, const char *fmt, va_list arg);
int vfscanf(FILE *fp, const char *fmt, va_list arg);
格式化输出:
int printf(const char *fmt, ...);
int sprintf(char *buf, const char *fmt, ...);
int snprintf(char *buf, size_t n, const char *fmt, ...);
int fprintf(FILE *fp, const char *fmt, ...);
int vprintf(const char *fmt, va_list arg);
int vsprintf(char *buf, const char *fmt, va_list arg);
int vsnprintf(char *buf, size_t n, const char *fmt, va_list arg);
F0int vfprintf(FILE *fp, const char *fmt, va_list arg);
其中带 v 开头的函数是将可变参数表(...)换成 va_list 类型,其它函数就不说了。
本来是想学习一下使用可变参数函数的,可变参数表用到2个函数:
va_start
va_end
//test.c
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#define MAXLINE 4096
void w_log(char *str, ...)
FILE *fp;
char szfilename[MAXLINE];
char szstr[MAXLINE];
time_t now;
struct tm t;
va_start(vargs, str);
vsnprintf(szstr, MAXLINE, str, vargs);
va_end(vargs);
time(&now);
localtime_r(&now, &t);
sprintf(szfilename, "./w_log.%4d%02d%02d", t.tm_year+1900, t.tm_mon+1, t.tm_mday);
fp = fopen(szfilename, "a+");
if (fp == NULL)
return;
fprintf(fp, "[%4d-%02d-%02d %02d:%02d:%02d] %s\n", t.tm_year+1900, t.tm_mon+1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, szstr);
fclose(fp);
}
void main()
{
int i;
char sztest[]="gogo args";
i = 1111;
w_log("testtest......");
w_log("%d_%s", 10, sztest);
w_log("%d,%s,%d,%s", 10, sztest, i, "hahaha...");
return;
}
--------------------------------------------------------------------------
结果:$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
[sand@localhost testfmt]$ gcc -o test test.c
[sand@localhost testfmt]$ ./test
[sand@localhost testfmt]$ cat w_log.20090702
[2009-07-02 16:24:04] testtest......
[2009-07-02 16:24:04] 10_gogo args
[2009-07-02 16:24:04] 10,gogo args,1111,hahaha...
[sand@localhost testfmt]$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
分享到:
相关推荐
5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准...
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell ...
5.11 格式化I/O 103 5.11.1 格式化输出 103 5.11.2 格式化输入 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 6.2 口令...
120 5.11 格式化I/O 121 5.12 实现细节 125 5.13 临时文件 127 5.14 标准I/O的替代软件 130 5.15 小结 130 习题 130 第6章 系统数据文件和信息 133 6.1 引言 133 6.2 口令文件 133 6.3 阴影口令 ...
5.11 格式化I/O 103 5.11.1 格式化输出 103 5.11.2 格式化输入 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 ...
5.11 格式化I/O 103 5.11.1 格式化输出 103 5.11.2 格式化输入 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 6.2 口令...
第5章 标准I/O库 91 5.1 引言 91 5.2 流和FILE对象 91 ...5.11 格式化I/O 103 5.11.1 格式化输出 103 5.11.2 格式化输入 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108
5.11 格式化I/O 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 6.2 口令文件 110 6.3 阴影口令 112 6.4 组文件 113 6.5 ...
5.11 格式化I/O 103 5.11.1 格式化输出 103 5.11.2 格式化输入 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 6.2 口令...
5.11 格式化I/O 5.12 实现细节 5.13 临时文件 5.14 标准I/O的替代软件 5.15 小结 习题 第6章 系统数据文件和信息 6.1 引言 6.2 口令文件 6.3 阴影口令 6.4 组文件 6.5 附加组ID ...
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 ...
本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、 进程间通信以及各种I/O。在此基础上,分别...
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...
5.11 格式化I/O 103 5.11.1 格式化输出 103 5.11.2 格式化输入 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 6.2 口令...