vsprintf and vsnprintf
2014-04-18 09:26
357 查看
尽量使用vsnprintf,否则可能会带来buffer拷贝的时候更改未知越界内存的问题,比如当前的buffer size为10,但如果需要拷贝的数据为15,则buffer[10]-buffer[14]的内存位置会被填充,但这块内存数据可能是给别的用途的,如下实例:
struct s
{
char buffer[10];
int other;
}
这时候调用vsprint,并且传入的参数大于10个字节的话,就会填充other的数据,这是不允许的
另:调用这个函数需要 stdarg.h 头文件.
另: 有时候需要通过一个开关来控制所有的输出,则可用下列方法
void printFunction(const char *fmt,...)
{
va_list args;
bool flag = FALSE;
#if defined (_DEBUG_)
flag = TRUE;
#endif
if (flag)
{
va_start (args, fmt);
int count = vprintf (fmt, args);
va_end (args);
}
}
struct s
{
char buffer[10];
int other;
}
这时候调用vsprint,并且传入的参数大于10个字节的话,就会填充other的数据,这是不允许的
另:调用这个函数需要 stdarg.h 头文件.
另: 有时候需要通过一个开关来控制所有的输出,则可用下列方法
void printFunction(const char *fmt,...)
{
va_list args;
bool flag = FALSE;
#if defined (_DEBUG_)
flag = TRUE;
#endif
if (flag)
{
va_start (args, fmt);
int count = vprintf (fmt, args);
va_end (args);
}
}
相关文章推荐
- PHP字符串函数之 sscanf echo print sprintf vsprintf printf vprintf fprintf vfprintf
- printf,sprintf,vsprintf
- C语言printf()、sprintf()、vsprintf() 的区别与联系
- C语言printf()、sprintf()、vsprintf() 的区别与联系
- 如何在MDK环境下使用printf以及使用vsprintf
- printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换
- printf、sprintf、vsprintf和wvsprintf的使用
- printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换函数
- printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换
- vsprintf, vswprintf与printf与函数的可变参数编程
- 如何在MDK环境下使用printf以及使用vsprintf
- C语言printf()、sprintf()、vsprintf() 的区别与联系
- printf,sprintf,vsprintf 区别
- keil C51:printf sprintf vprintf vsprintf 函数学习
- printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换函数
- echo、print、print_r、var_dump、printf、sprintf 和 vsprintf 的区别
- PHP字符串函数之 sscanf echo print sprintf vsprintf printf vprintf fprintf vfprintf
- printf(),sprintf(),vsprintf() 详解
- 格式符函数printf()、sprintf()、 vprintf()、 vsprintf()、 fprintf() 和 vfprintf()
- printf,sprintf,vsprintf 区别