哈哈哈哈 发表于 2024-8-21 11:18:45

printf(const char* fmt, ...)

最近在STC8051U中移植了一个ST7735屏幕驱动,但是有一个函数一直报错

void ST7735_printf(const char* fmt, ...)
{
    int buff_size = 0;
    char* buf = NULL;
   
    va_list args;
    va_start(args, fmt);

    buff_size = vsnprintf(NULL, 0, fmt, args) + 1; // 计算需要的缓冲区大小
    buf = (char*) malloc(buff_size * sizeof(char)); // 分配缓冲区

    vsprintf(buf, fmt, args); // 将格式化的字符串写入缓冲区

          ST7735_WriteString(DEF_X,DEF_Y,buf,Font_16x26,FCOLOR,BCOLOR);

    va_end(args);
          free(buf);
}报错如下:


有大佬遇到过吗?

哈哈哈哈 发表于 2024-8-21 11:35:48

头文件该进入的都引入了

哈哈哈哈 发表于 2024-8-21 11:36:33

#include "ST7735.h"
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include "font.h"
#include <stdio.h>
#include "delay.h"

单独编译这个文件,0error 0 waring

DebugLab 发表于 2024-8-21 11:43:44

编译器没有找到vsnprintf的定义

DebugLab 发表于 2024-8-21 11:45:55


stdio.h中只有vsprintf没有vsnprintf

soma 发表于 2024-8-21 11:46:01

vsnprintf没有定义。文件里面找找有没有。

哈哈哈哈 发表于 2024-8-21 11:53:56

vsnprintf 应该是stdio.h标准库里面的东西

嵌入式之路 发表于 2024-8-21 12:25:34

micro lib 使用了吗

哈哈哈哈 发表于 2024-8-21 12:29:45

嵌入式之路 发表于 2024-8-21 12:25
micro lib 使用了吗

C251貌似没有这个选项



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

durongze 发表于 2024-8-30 15:09:14

这个应该是工程没配好。
页: [1]
查看完整版本: printf(const char* fmt, ...)