#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include "debug_message.h"
void debug_message(const char *ptr, ...)
va_list arg_ptr;
int n = 0;
int buf_len = 10;
/* 判断传入的参数是否有效 */
if(NULL == ptr)
{
printf("pass param error\n");
return ;
}
while(1)
{
/* 申请保存打印信息的缓存 */
debug_buf = malloc(buf_len);
if(NULL == debug_buf)
{
printf("fail to malloc\n");
break ;
}
memset(debug_buf, 0, buf_len);
va_start(arg_ptr, ptr);
n = vsnprintf(debug_buf, buf_len, ptr, arg_ptr);
va_end(arg_ptr);
/*vsnprintf返回正确,并且分配的内存
足够存放打印信息*/
if(n > -1 && n < buf_len)
{
printf("n = %d\n", n);
printf("%s", debug_buf);
break ;
}
/* vsnprintf函数返回错误*/
if(n < 0)
{
printf("debug fun error\n");
break ;
}
/* 传入的打印信息大的超出预期,返回*/
if(buf_len > 102400)
{
printf("pass string is too long\n");
break ;
}
/* 原来分配的打印信息的缓存不够大,
释放掉后,再次分配较大的缓存*/
free(debug_buf);
buf_len *= 2;
}
free(debug_buf);
#endif
return ;
}
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include "debug_message.h"
void debug_message(const char *ptr, ...)
{
#ifdef DEBUG_OPEN
va_list arg_ptr;
int n = 0;
int buf_len = 10;
/* 判断传入的参数是否有效 */
if(NULL == ptr)
{
printf("pass param error\n");
return ;
}
while(1)
{
/* 申请保存打印信息的缓存 */
debug_buf = malloc(buf_len);
if(NULL == debug_buf)
{
printf("fail to malloc\n");
break ;
}
memset(debug_buf, 0, buf_len);
va_start(arg_ptr, ptr);
n = vsnprintf(debug_buf, buf_len, ptr, arg_ptr);
va_end(arg_ptr);
/*vsnprintf返回正确,并且分配的内存
足够存放打印信息*/
if(n > -1 && n < buf_len)
{
printf("n = %d\n", n);
printf("%s", debug_buf);
break ;
}
/* vsnprintf函数返回错误*/
if(n < 0)
{
printf("debug fun error\n");
break ;
}
/* 传入的打印信息大的超出预期,返回*/
if(buf_len > 102400)
{
printf("pass string is too long\n");
break ;
}
/* 原来分配的打印信息的缓存不够大,
释放掉后,再次分配较大的缓存*/
free(debug_buf);
buf_len *= 2;
}
free(debug_buf);
#endif
return ;
}