【问题标题】:error: invalid conversion from 'char*' to 'uint32_t错误:从 'char*' 到 'uint32_t 的无效转换
【发布时间】:2017-08-14 19:39:50
【问题描述】:

我正在尝试手动设置 RTC 时钟。 自动完成时,这是工作代码:

clock.setDateTime((__DATE__, __TIME__));

但现在我想手动设置它,这就是我正在尝试的:

char dateTime[20];
strcat(dateTime, "2017,03,22,16,20,04");
//clock.setDateTime((__DATE__, __TIME__));
clock.setDateTime(dateTime);

我收到以下错误(在最后一行):

error: invalid conversion from 'char*' to 'uint32_t {aka long unsigned int}' [-fpermissive]

如何解决?

编辑: 这就是 setDateTime 的定义方式:

void setDateTime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second);

【问题讨论】:

  • setDateTime 是如何定义的?
  • 好的。因此,您需要将字符串拆分为与 setDateTime 的定义方式相匹配的参数。
  • 您正在将一个字符串 (char *) 提供给一个需要整数参数的函数......这是一个无效的转换(正如编译器告诉你的那样)。你期待什么?
  • 另外,我猜setDateTime() 有多个声明,因为 1) 您向我们展示的那个也不应该与 (__DATE__, __TIME__) 一起使用,以及 2) 您展示的那个我们并不期待uint32_t,这是编译器抱怨的。
  • 如果你可以打电话给clock.setDateTime(2017,3,22,16,20,4),为什么还要搞乱字符串?

标签: c++ arduino char invalid-characters uint


【解决方案1】:

setDateTime() 将日期视为一串整数:

setDateTime(year, month, day, hours, minutes, seconds);

奖金:根据man strcat

char *strcat(char *dest, const char *src);

说明

strcat() 函数将 src 字符串附加到 dest 字符串,...

既然你这样用:

char dateTime[20];
strcat(dateTime, "2017,03,22,16,20,04");

您将"2017,03,22,16,20,04" 附加到未初始化的内存中,这是未定义的行为

【讨论】:

    【解决方案2】:

    setDateTime() 接受ints 作为参数,但你给它char 数组。

    调用应该是:

    clock.setDataTime(2017, 3, 22, 16, 20, 4);
    

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 2023-03-26
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 2021-01-30
      相关资源
      最近更新 更多