You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编译报错:将‘const char *’赋值给‘char’问题求助

C语言编译错误修复:帧指针存储到变量失败问题

作为C语言新手,尝试将帧数据的指针存储到next_frame变量时遇到编译错误。直接将frames[abs((FRAME_COUNT - 1) - current_frame)]传入oled_write_raw_P能正常编译,但存入变量后就报错。

代码片段

// 编译失败
oled_write_raw_P(next_frame, FRAME_SIZE);

// 编译成功
oled_write_raw_P(frames[abs((FRAME_COUNT - 1) - current_frame)], FRAME_SIZE);

完整代码

#define FRAME_COUNT 5 // 动画帧数
#define FRAME_SIZE 256
#define FRAME_DURATION 200 // 每帧持续时间(毫秒)

// 变量定义
uint32_t timer = 0;
uint8_t current_frame = 0;
char next_frame;

static void render_animation(void) {
    static const char PROGMEM frames[FRAME_COUNT][FRAME_SIZE] = {
        // 图像数据已省略
    };

    // 当计时器超过200ms时切换帧
    if (timer_elapsed32(timer) > FRAME_DURATION) {
        timer = timer_read32();
        current_frame = (current_frame + 1) % FRAME_COUNT;
        next_frame = frames[abs((FRAME_COUNT - 1) - current_frame)];

        // 设置光标位置
        oled_set_cursor(128, 0);

        // 写入下一帧
        oled_write_raw_P(next_frame, FRAME_SIZE);
    }
}

错误信息

error: assignment to 'char' from 'const char *' makes integer from pointer without a cast [-Werror=int-conversion]
next_frame = frames[abs((FRAME_COUNT - 1) - current_frame)];

error: passing argument 1 of 'oled_write_raw_P' makes pointer from integer without a cast [-Werror=int-conversion]
oled_write_raw_P(next_frame, FRAME_SIZE);


问题原因

核心问题是类型不匹配:

  • frames是二维数组,frames[index]返回的是指向该帧数据起始地址的指针(类型为const char PROGMEM *)。
  • 你定义的next_frame是char类型,仅能存储单个字符,无法容纳指针地址。赋值时编译器会强制将指针转换为整数,调用函数时又将整数转回指针,触发类型转换错误。

修复方法

将next_frame的类型修改为匹配的指针类型:

  1. 修改变量定义:
const char PROGMEM *next_frame;
  1. 赋值和调用代码无需额外修改,此时next_frame的类型与frames[index]完全匹配,编译即可通过:
next_frame = frames[abs((FRAME_COUNT - 1) - current_frame)];
oled_write_raw_P(next_frame, FRAME_SIZE);

补充说明

PROGMEM是AVR平台的宏,用于将数据存储到程序存储器(Flash)而非RAM中,因此指针类型需要带上PROGMEM修饰,确保oled_write_raw_P能正确从Flash读取数据。

内容的提问来源于stack exchange,提问作者Joe Scotto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:31:11