简短一:从 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
。这将最多连接从 incoming
到 dateTime
的两个字符,并放置一个终止空字符。
分机
您可以将其扩展到:
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]
的无效性。
代码:
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
。这将最多连接从 incoming
到 dateTime
的两个字符,并放置一个终止空字符。
分机
您可以将其扩展到:
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]
的无效性。