char* timecompare(){
char time[8];
snprintf(time,8,"%i:%02i",hour(),minute());
return time;
}
char* timefeed = "8:0";
if (strcmp(timecompare(), timefeed) == 0){
Serial.println("hello");
}
我将此作为我的代码,当timecompare()和timefeed都相等时它不打印你好?我这是一个指针问题?我没有将timecompare()与timefeed进行比较,而是将timecompare()与“8:0”进行比较,然后循环工作......这是timefeed变量的问题吗?
答案 0 :(得分:3)
您正在从time
返回堆栈分配变量timecompare()
。这是非法的,因为堆栈分配的内存仅在声明变量的函数中有效。
相反,您需要返回堆分配的字符串。您的编译器应该警告您这一点。你可以这样写:
char* timecompare(){
char* time = malloc(8);
snprintf(time,8,"%i:%02i",hour(),minute());
return time;
}
完成后请记住free()
内存。
答案 1 :(得分:1)
您将局部变量time
退出其范围。退出函数timecompare
时,返回的值不再是有效指针。
此外,从%02i
中移除“02”,如果将其与8:0进行比较,则应为%i
。使用%02i
将产生“00”。