sprintf 实例

来源:互联网 发布:重庆市设计院知乎 编辑:程序博客网 时间:2024/05/16 06:37

文章出处:http://blog.csdn.net/shift_wwx

请转载的朋友标明出处~~

sprintf 在填充buffer 的时候,可能需要将buffer 一并的打印出来,一般情况sprintf 之后加个log 就可以了,但是碰到很多应用sprintf的地方就很累了,可以包装起来。

#define SQL_DEBUG 0#define getSqlParams(func, buffer, args...) \    do{\        sprintf(buffer, ##args);\        if(SQL_DEBUG){\            LOGD("getSqlParams for %s\n", func);\            LOGD("%s = %s\n",#buffer, buffer);\        }\    }while(0)
或者是多加一个函数做一些补充的事情:

#define getSqlParams(func, buffer, args...) sprintf(buffer, ##args);\    temp_add(func, buffer)

宏定义中的省略号就是指一串数目不限的参数列表,前面用args只有为了后面引用这串参数.

至于省略号的用法可以看一下:函数参数中带省略号的用法


来看一下sprintf 的source code:

intsprintf(char *str, const char *fmt, ...){    int ret;    va_list ap;     FILE f;    struct __sfileext fext;    _FILEEXT_SETUP(&f, &fext);    f._file = -1;     f._flags = __SWR | __SSTR;    f._bf._base = f._p = (unsigned char *)str;    f._bf._size = f._w = INT_MAX;    va_start(ap, fmt);    ret = __vfprintf(&f, fmt, ap);    va_end(ap);    *f._p = '\0';    return (ret);} 
进_vfprintf 一看,还是有的晕乎的,后期研究了~~






0 0
原创粉丝点击