简短的:从字符到常量字符*的转换无效

Short one: invalid conversion from char to const char*

本文关键字:字符 转换 无效 常量      更新时间:2023-10-16

code:

void setup(){
 Serial.begin(19200);
 static char value [20] = "20:17:12";
 setSimTime(value);
}
void setSimTime(char* incoming){
  char dateTime[20];
  strcat(dateTime, "20");
  strcat(dateTime, incoming[0-1]);
  Serial.println(dateTime);
}

正确的方法是什么?感谢任何帮助

使用 strcat(dateTime, incoming[0-1]); ,其中incoming[0-1]incoming[-1]相同,导致未定义的行为。实际上incoming[-1]是位于数组索引-1处的单个字符,这是错误的原因,编译器无法将单个字符(char(转换为字符指针(char*(。

而是使用:

strncat(dateTime, incoming, 2);

请注意 strncat 中的n。这将从 incomingdateTime 最多连接两个字符,并放置一个终止的空字符。

外延

您可以将其扩展到:

strncat(dateTime, incoming + n, l);

其中n是起始索引,即之前的零,l是要复制的最大长度。

因此,如果您如何连接带有索引 3 和 4 的字符,请执行以下操作:

strncat(dateTime, incoming + 3, 2);

确切的错误消息来自以下事实:incoming[0-1] 的类型为 char ,但strcat期望将const char*作为第二个参数,即指向char的指针。

额外的const在这里不是问题,因为非常量值始终可以转换为常量值。

请参阅有关incoming[0-1]无效的其他答案/评论。