变长参数的传递:
- #include <stdarg.h>
- int vprintf(const char *format, va_list ap);
- int vfprintf(FILE *stream, const char *format, va_list ap);
- int vsprintf(char *str, const char *format, va_list ap);
这些函数完全等价于格式化输出函数,只是形式上采用固定参数代替变长参数,这样描述参数更加紧凑,这些函数常用于函数内部的功能实现。
例子:
设计函数 int PrintLog(FILE *stream, const char *pformat, ...),它按照pformat的内容,控制后继参数的数量和格式,并在文件流stream中输出。
- #include <stdarg.h>
- #include <stdio.h>
- int PrintLog(FILE *pfile, const chart *pformat, ...) {
- va_list _va_list;
- char szBuf[1024];
- if(pformat == NULL || pfile == NULL) return -1;
- va_start(_va_lsit, pformat);
- vsprintf(szBuf, pformat, _valist);
- va_end(szBuf, pfile);
- return 0;
- }
- int main() {
- PrintLog(stderr, "[%s] [%s] [%d] [%c]/n", "This", "is", 5, 'a');
- PrintLog(stderr, "Error [%p] [%.2f] [%X]/n", NULL, 3.123, 100);
- return 0;
- }
文件读写位置的定位:
- #include <stdio.h>
- int fseek(FILE *stream, long int offset, int whence);
- void rewind(FILE *stream);
- long int ftell(FILE *stream);
文件的错误与结束状态:
- #include <stdio.h>
- int ferror(FILE *fp);
- char buf[1024];
- void clearerr(FILE *stream);