Strcmp与相同的字符串比较但不进入循环

时间:2011-04-29 02:51:37

标签: c arduino

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变量的问题吗?

2 个答案:

答案 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”。