{见到他 她变得很低很低 低到尘埃里, 但她内心是欢喜的 从尘埃里开出花来}
#include <stdio.h>
int printf(const char *format, ...); //输出到标准输出 int fprintf(FILE *stream, const char *format, ...); //输出到文件 int sprintf(char *str, const char *format, ...); //输出到字符串str中 int snprintf(char *str, size_t size, const char *format, ...); //按size大小输出到字符串str中
以下函数功能与上面的一一对应相同,只是在函数调用时,把上面的...对应的一个个变量用va_list调用所替代。
#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 vsnprintf(char *str, size_t size, const char *format, va_list ap);
可变参数列表va_list宏说明:
void va_start(va_list ap, last); //开始的时候被调用va_start,获得各输出变量地址 void va_end(va_list ap); //结束的时候被调用va_end,释放相应的资源
example(cocos ccstring接口):
bool __String::initWithFormatAndValist(const char* format, va_list ap) { bool bRet = false; char* pBuf = (char*)malloc(kMaxStringLen); if (pBuf != nullptr) { vsnprintf(pBuf, kMaxStringLen, format, ap); _string = pBuf; free(pBuf); bRet = true; } return bRet; } bool __String::initWithFormat(const char* format, ...) { bool bRet = false; _string.clear(); va_list ap; va_start(ap, format); bRet = initWithFormatAndValist(format, ap); va_end(ap); return bRet; }