vsnprintf
http://www.cplusplus.com/reference/cstdio/vsnprintf/
int vsnprintf (char * s, size_t n, const char * format, va_list arg );
Composes a string with the same text that would be printed if format was used on printf, but using the elements in the variable argument list identified by arg instead of additional function arguments and storing the resulting content as a C string in the buffer pointed by s (taking n as the maximum buffer capacity to fill).
If the resulting string would be longer than n-1 characters, the remaining characters are discarded and not stored, but counted for the value returned by the function.
Internally, the function retrieves arguments from the list identified by arg as if va_arg was used on it, and thus the state ofarg is likely to be altered by the call.
In any case, arg should have been initialized by va_start at some point before the call, and it is expected to be released byva_end at some point after the call.
s: Pointer to a buffer where the resulting C-string is stored.
The buffer should have a size of at least n characters.
n: Maximum number of bytes to be used in the buffer.
The generated string has a length of at most n-1, leaving space for the additional terminating null character.size_t is an unsigned integral type.formatC string that contains a format string that follows the same specifications as
format : in printf (see printf for details).
argA : value identifying a variable arguments list initialized with va_start.va_list is a special type defined in <cstdarg>.
Return Value
The number of characters that would have been written if n had been sufficiently large, not counting the terminating null character.
If an encoding error occurs, a negative number is returned.
Notice that only when this returned value is non-negative and less than n, the string has been completely written.
/* vsnprintf example */
#include <stdio.h>
#include <stdarg.h> void PrintFError ( const char * format, ... )
{
char buffer[];
va_list args;
va_start (args, format);
vsnprintf (buffer,,format, args);
perror (buffer);//printf("%s",buffer);
va_end (args);
} int main ()
{
FILE * pFile;
char szFileName[]="myfile.txt"; pFile = fopen (szFileName,"r");
if (pFile == NULL)
PrintFError ("Error opening '%s'",szFileName);
else
{
// file successfully open
fclose (pFile);
}
return ;
}
in eclipse with cygwin, compile get warning: implicit declaration of function ‘vsnprintf’.
http://cboard.cprogramming.com/c-programming/90483-snprintf-warning-error.html
"snprintf was not part of C90, it's a C99 addition or an extension to C90 available to certain compilers.
It looks like you may be using some variant of gcc, so try adding the flag -std=c99."
the above answer is right, in my make file, change c89 to c99, problem solved. also, just delete the origninate CPPUTEST_CFLAGS += -std=c89 also works. makefile is useful.
CPPUTEST_CFLAGS += -std=c99
to better understand , here is an application of snprintf.
static void failWhenNotAllExpectationsUsed(void)
{
char format[] = "Expected %d reads/writes but got %d";
char message[sizeof format + + ]; if (getExpectationCount == setExpectationCount)
return; snprintf(message, sizeof message, format, setExpectationCount,
getExpectationCount);
fail(message);
} static void fail(char *message )
{
failureAlreadyReported = ;
FAIL_TEXT_C(message);
}
vsnprintf的更多相关文章
- printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换函数
参考:http://blog.sina.com.cn/s/blog_674b5aae0100prv3.html 总览 (SYNOPSIS) #include <stdio.h> int p ...
- 有关va_list和vsnprintf输出函数的问题
va_list ap; //声明一个变量来转换参数列表 va_start(ap,fmt); //初始化变量 va_end(ap); //结束变量列表,和va_start成对使用 可以根据va_arg( ...
- sprintf、vsprintf、sprintf_s、vsprintf_s、_snprintf、_vsnprintf、snprintf、vsnprintf 函数辨析
看了题目中的几个函数名是不是有点头晕?为了防止以后总在这样的细节里纠缠不清,今天我们就来好好地辨析一下这几个函数的异同. 实验环境: Windows下使用VS2017Linux下使用gcc4.9.4 ...
- vsnprintf和snprintf(vsnprintf就是为了支持va_list,实现对于sprint功能封装而做的)
vsnprintf和snprintf是C语言printf家族函数的成员,相关函数列表如下: #include <stdio.h> int printf(const char *format ...
- printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换
总览 (SYNOPSIS) #include <stdio.h> int printf(const char *format, ...); int fprintf(FILE *stream ...
- 使用vsnprintf后链接错误及解决方法
/home/merlin/swinstall/MentorGraphics/Sourcery_CodeBench_Lite_for_ARM_EABI/bin/../lib//../../../../a ...
- linux内核调试技术之自构proc
1.简介 在上一篇中,在内核中使用printk可以讲调试信息保存在log_buf缓冲区中,可以使用命令 #cat /proc/kmsg 将缓冲区的数区的数数据打印出来,今天我们就来研究一下,自己写k ...
- class.c 添加中文注释(3)
int class_device_register(struct class_device *class_dev) { /* [cgw]: 初始化一个struct class_device */ cl ...
- centos 7.0 编译安装php 7.0.3
php下载页面 http://cn2.php.net/downloads.php 7.0.3多地区下载页面 http://cn2.php.net/get/php-7.0.3.tar.gz/from/a ...
随机推荐
- PAT (Basic Level) Practise:1038. 统计同成绩学生
[题目链接] 本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最 ...
- cocos2d Slider 透明滑动部件无法生成解决办法
用cocos studio 2.3.2 制作声音大小控制滑条的时候遇到了一个奇葩bug我把透明图片和其它资源打包到合图里面然后到到cocos stdudio里面 那张透明图片变成了只有一个像素的点,最 ...
- JSBinding+SharpKit / JavaScript调试
注意: 1 Firefox 的版本用41 2 我发现调试很难用的,现在我都用打印 步骤参考图:
- mysql数据库设计
2.MySQL之选择字段数据类型 1.http://blog.itpub.net/29660208/viewspace-1208352/ 3.http://www.cnblogs.com/HondaH ...
- 你所不了解的setTimeout
看到了一篇不错的文章<你会用setTimeout吗 >,转载过来的,改了个名字,一下子感觉搞大上了,嘎嘎. 加了几个关于 setTimeout 和setInterval的小知识: 关于se ...
- Ecs下的两台mysql做主从设置
一.主库配置master 1.用户root账户进入到mysql mysql -uroot -p 2.创建用于主从同步的账户,并赋予权限,由于这个账户只是作为同步数据用,所以分配权限不要过大,我这里只赋 ...
- UNICODE与UTF8和GBK之间的关系
http://wenku.baidu.com/link?url=bheGEzfSjEx-QX-ciME5oKooKYE08_NJZ02l2kKFa7kVZJ4t8Ks2uSNByovgP2QL6btq ...
- Redis入门(一)系统安装
硬件环境:Thinkpad T450,Intel i5-5200U CPU @ 2.20GHz × 4 ,8GB RAM 软件环境: ubuntu 14.04.4 (trusty) 一.软件安装 #w ...
- Python - 异步IO\数据库\队列\缓存
协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,协程一定是在单线程运行的. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和 ...
- MySQL下载及安装
MySQL官网 http://dev.mysql.com/downloads/ Download --> Community --> MySQL Community Server 选择操 ...