自定义printf实现

size_t Print::printf(const char *format, ...)

{

  char loc_buf[64];

  char * temp = loc_buf;

  va_list arg;

  va_list copy;

  va_start(arg, format);

  va_copy(copy, arg);

  int len = vsnprintf(temp, sizeof(loc_buf), format, copy);

  va_end(copy);

  if(len < 0) {

    va_end(arg);

    return 0;

  };

  if(len >= sizeof(loc_buf)){

    temp = (char*) malloc(len+1);

    if(temp == NULL) {

      va_end(arg);

     return 0;

    }

    len = vsnprintf(temp, len+1, format, arg);

  }

  va_end(arg);

  len = write((uint8_t*)temp, len);

  if(temp != loc_buf){

​    free(temp);

  }

  return len;

}
© 2021 hanbaoaaa record.浙ICP备20005263号
asdad
联系方式 asdasd
2021-5-8 4:19
sss
回复数 (0) 点击展开
加载更多

新增评论

称呼
联系方式
邮箱(选填)
内容

提交

取消