[英]Strcmp comparing to identical strings but not entering loop
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 变量的问题吗?
您正在从timecompare()
返回一个堆栈分配的变量time
。 这是非法的,因为堆栈分配的 memory 仅在声明变量的 function 中有效。
相反,您需要返回一个堆分配的字符串。 你的编译器应该警告你这一点。 你可以这样写:
char* timecompare(){
char* time = malloc(8);
snprintf(time,8,"%i:%02i",hour(),minute());
return time;
}
完成后记得free()
memory。
您从 scope 中返回一个局部变量time
。 当您退出 function timecompare
时,返回值不再是有效指针。
此外,从%02i
中删除“02”,如果将其与 8:0 进行比较,它应该是%i
。 使用%02i
将产生“00”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.