简短一:从 char 到 const char* 的无效转换

Short one: invalid conversion from char to const char*

代码:

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 在这里不是问题,因为非 const 值总是可以转换为 const 值。

参见其他 answers/comments 关于 incoming[0-1] 的无效性。