2011-04-29 60 views
0
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变量?Strcmp比较相同的字符串,但不进入循环

回答

3

您正在从timecompare()返回堆栈分配变量time。这是非法的,因为堆栈分配的内存仅在声明变量的函数中有效。

相反,你需要返回一个堆分配的字符串。你的编译器应该警告你这一点。你可以这样写:

char* timecompare(){ 
    char* time = malloc(8); 
    snprintf(time,8,"%i:%02i",hour(),minute()); 
    return time; 
} 

请记住free()内存完成后。

+0

malloc行给了我一个错误无效转换从void *到char * – user541597 2011-04-29 03:05:41

+0

,再次我可以键入一个值而不是变量timefeed并得到正确的结果,所以是不是问题timefeed变量? – user541597 2011-04-29 03:06:56

+0

现代编译器不应该那样做。你必须从malloc'char * time =(char *)malloc(8);' – 2011-04-29 03:07:21

1

您将范围外的本地变量time返回。当您退出函数timecompare时,返回的值不再是有效的指针。

此外,从%02i中删除“02”,如果将其与8:0进行比较,它应该是%i。使用%02i将产生“00”。

+0

会解决问题吗? – user541597 2011-04-29 03:05:18

+0

它会解决这个问题,但可能会产生其他问题,使用全局变量不是一个理想的解决方案。 – littleadv 2011-04-29 03:16:53

+0

那么最好的解决方案是什么?我尝试了上述解决方案,但没有奏效。 – user541597 2011-04-29 03:25:41

相关问题