Strcmp сравнивает с одинаковыми строками, но не входит в цикл - PullRequest
0 голосов
/ 29 апреля 2011
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 ]

3 голосов
/ 29 апреля 2011

Вы возвращаете выделенную в стеке переменную time из timecompare().Это недопустимо, поскольку выделенная в стеке память действительна только в функции, в которой объявлена ​​переменная.

Вместо этого вам нужно вернуть выделенную кучу строку.Ваш компилятор должен предупреждать вас об этом.Вы могли бы написать это так:

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

Не забудьте free() память после того, как вы закончили с ним.

1 голос
/ 29 апреля 2011

Вы возвращаете локальную переменную time из области видимости.При выходе из функции timecompare возвращаемое значение больше не является действительным указателем.

Кроме того, удалите «02» из %02i, оно должно быть %i, если сравнить его с 8: 0.Использование %02i даст «00».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...