char *feedtime = "0:0";
String interval = "6";
char* convert(char* x, String y){
int hour;
int minute;
sscanf(x, "%d:%d", &hour, &minute);
char buf[5];
if (y == "6"){
if (hour > 17){
hour = (hour+6)%24;
snprintf(buf, 5, "%d%s", hour, ":0");
}
if (hour < 18){
hour = hour + 6;
snprintf(buf, 5, "%d%s", hour, ":0\0");
}
}
buf [5] = '\0';
return buf;
}
执行转换时(时间,间隔);
串行监视器返回正确的值,但会向其添加一个'或另一个符号。
任何想法为什么?
我从人们说的更新了我的代码,但是我仍然遇到同样的问题?
答案 0 :(得分:3)
您正在返回指向堆栈变量的指针。这是错的。一旦函数退出,'buf'使用的堆栈空间是未定义的。
答案 1 :(得分:0)
缓冲区中需要额外的字符。您只有一个4个字符的数组,但是您需要5个字符(2个表示小时,2表示:0,1表示尾随0)。完成后,您还需要null终止字符串。
和jcopenha说的话。
答案 2 :(得分:0)
您的字符串没有正确的zerotminminated。增加buf的大小。