我写了一些操作指向char
数组的代码,用于从NMEA RMC句子中格式化时间和日期,以在Arduino Pro Mini上使用,类似于以下代码:
char *UTC = "120435";
char *DATE = "050117";
char TIME[9];
char *ptr = TIME;
char *fieldPtr = UTC;
for (int a = 0; a < 8; a++) {
*ptr++ = *fieldPtr++;
if (a == 1 || a == 3) {
*ptr = ':';
ptr++;
}
}
*ptr = '\0';
Serial.print("TIME: ");
Serial.println(TIME); //output: "12:04:35" //-OK
char date[9];
ptr = date;
fieldPtr = DATE;
for (int a = 0; a < 8; a++) {
*ptr++ = *fieldPtr++;
if (a == 1 || a == 3) {
*ptr = '.';
ptr++;
}
}
*ptr = '\0';
Serial.print("TIME: ");
Serial.println(TIME); //output: "d" //whatever follows DATE
Serial.print("date: ");
Serial.println(date); //output: "05.01.17" //-OK
第二轮时间输出似乎是跟在日期后面的一些字符,存储在内存中。
请问有谁能帮我解释一下这是怎么回事吗?
a < 8
Overrun is occurring. -->a < 6
- BLUEPIXYa < 7
是为了包含结尾的\0
。 - David Ranieri*ptr = '\0';
。 - BLUEPIXYUTC
的长度为7个字节。 - David Ranieria < 7
,则需要删除*ptr = '\0';
。 - BLUEPIXY