不兼容的整数到指针转换将'char'传递给'const char *'类型的参数

时间:2017-08-03 13:17:36

标签: c pointers char

graphics_draw_text(ctx, s_time_text, s_font, bounds, GTextOverflowModeWordWrap, GTextAlignmentLeft, NULL);take the address with &.  

Incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'

我想要的只是我在画布上绘制的文字显示时间, s_time_text
我理解基本数据类型,但指针仍然让我感到困惑。如果我使用普通的文本图层,它可以正常工作,但似乎是当我在画布图层上绘制文本时,它会感到沮丧。以下是相关部分的摘录。

void graphics_draw_text(GContext *ctx, const char *text, GFont const font, 
    const GRect box, const GTextOverflowMode overflow_mode, const GTextAlignment alignment,
    GTextAttributes *text_attributes);

static char s_time_text;


static void prv_handle_minute_tick(struct tm *tick_time, TimeUnits units_changed)
{
    char s_time_text[] = "00:00";
    char *time_format = clock_is_24h_style() ? "%H:%M" : "%I:%M";
    strftime(s_time_text, sizeof(s_time_text), time_format, tick_time);
}

static void canvas_update_proc(Layer *layer, GContext *ctx) {
    s_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FREEMONO_18));
    GRect bounds = GRect(0, 0, 60, 20);
    graphics_context_set_text_color(ctx, GColorBlack);
    graphics_draw_text(ctx, s_time_text, s_font, bounds, GTextOverflowModeWordWrap, GTextAlignmentLeft, NULL);
}

3 个答案:

答案 0 :(得分:4)

您在全局上下文中将s_time_text两次声明为char,在函数prv_handle_minute_tick中第二次声明为local char []变量。

如果必须在此编译单元(文件)范围内可见,请删除第二个并将全局修改为:

  static char s_time_text[]= "00:00";

但请记住 - 它只有6个字符(包括结束零)

答案 1 :(得分:2)

graphics_draw_text函数的第二个参数

期待char *
graphics_draw_text(GContext * ctx, const char * text, GFont const font, const GRect box, const GTextOverflowMode overflow_mode, const GTextAlignment alignment, GTextAttributes * text_attributes) 

s_time_text被声明为文件全局char

static char s_time_text;

s_time_text函数范围内的canvas_update_proc不是您在prv_handle_minute_tick函数中声明的那个。

答案 2 :(得分:1)

要添加其他答案,会发生的情况是编译器会在调用char s_time_text时替换全局graphics_draw_text(ctx, s_time_text, ..,但首先会将此char提升为int,然后抱怨整数不能转换为指针。