找回密码
 立即注册
查看: 362|回复: 9

printf(const char* fmt, ...)

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-05-01 11:24:23

13

主题

95

回帖

294

积分

中级会员

积分
294
发表于 2024-8-21 11:18:45 | 显示全部楼层 |阅读模式
最近在STC8051U中移植了一个ST7735屏幕驱动,但是有一个函数一直报错

  1. void ST7735_printf(const char* fmt, ...)
  2. {
  3.     int buff_size = 0;
  4.     char* buf = NULL;
  5.    
  6.     va_list args;
  7.     va_start(args, fmt);
  8.     buff_size = vsnprintf(NULL, 0, fmt, args) + 1; // 计算需要的缓冲区大小
  9.     buf = (char*) malloc(buff_size * sizeof(char)); // 分配缓冲区
  10.     vsprintf(buf, fmt, args); // 将格式化的字符串写入缓冲区
  11.           ST7735_WriteString(DEF_X,DEF_Y,buf,Font_16x26,FCOLOR,BCOLOR);
  12.     va_end(args);
  13.           free(buf);
  14. }
复制代码
报错如下:
截图202408211118048711.jpg

有大佬遇到过吗?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-05-01 11:24:23

13

主题

95

回帖

294

积分

中级会员

积分
294
发表于 2024-8-21 11:35:48 | 显示全部楼层
头文件该进入的都引入了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-05-01 11:24:23

13

主题

95

回帖

294

积分

中级会员

积分
294
发表于 2024-8-21 11:36:33 | 显示全部楼层
  1. #include "ST7735.h"
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <stdarg.h>
  5. #include "font.h"
  6. #include <stdio.h>
  7. #include "delay.h"
复制代码


单独编译这个文件,0error 0 waring
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4851

回帖

8390

积分

超级版主

DebugLab

积分
8390
发表于 2024-8-21 11:43:44 | 显示全部楼层
编译器没有找到vsnprintf的定义
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4851

回帖

8390

积分

超级版主

DebugLab

积分
8390
发表于 2024-8-21 11:45:55 | 显示全部楼层

stdio.h中只有vsprintf没有vsnprintf
截图202408211145162715.jpg
DebugLab
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-04 00:16:27
已绑定手机

19

主题

3191

回帖

4930

积分

论坛元老

积分
4930
发表于 2024-8-21 11:46:01 来自手机 | 显示全部楼层
vsnprintf没有定义。文件里面找找有没有。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-05-01 11:24:23

13

主题

95

回帖

294

积分

中级会员

积分
294
发表于 2024-8-21 11:53:56 | 显示全部楼层
vsnprintf 应该是stdio.h标准库里面的东西
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-04-30 10:57:37

17

主题

533

回帖

1326

积分

金牌会员

积分
1326
发表于 2024-8-21 12:25:34 | 显示全部楼层
micro lib 使用了吗
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-05-01 11:24:23

13

主题

95

回帖

294

积分

中级会员

积分
294
发表于 2024-8-21 12:29:45 | 显示全部楼层

C251貌似没有这个选项
截图202408211228209058.jpg


如果没有vsnprintf这个函数的话,直接固定大小缓冲区大小也是一个办法
  1. buff_size = 20; // 设定缓冲区大小20
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-05-01 18:20:12

79

主题

631

回帖

1132

积分

金牌会员

积分
1132
发表于 2024-8-30 15:09:14 | 显示全部楼层
这个应该是工程没配好。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 03:59 , Processed in 0.249842 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表