Проблема с функцией
- Войдите на сайт для отправки комментариев
Вс, 06/12/2015 - 17:21
Всем доброго вчерера. Есть некая библиотека получения времени с ds3231.
Есть функции возврата времения типа byte. Время выдает так: 1:5:2, а хотелось бы 01:05:02 (1час 5 мин 2сек)
Решил приколхозить в библеотеку часов функцию convert( byte k);
char* DS3231::convert(byte& k) { strcpy(outline, ""); if(k>=0 && k<10){ sprintf(outline,"0%d",k); } else{ sprintf(outline,"%d",k); } return outline; }
outline - массив char[10];
k - число на входе (минута или час или секунда)
собственно в основной программе, например:
second = Clock.getSecond(); minute = Clock.getMinute(); hour = Clock.getHour(h12, PM); sprintf(out, "%s:%s:%s", Clock.convert(hour), Clock.convert(minute), Clock.convert(second));
выдаст 01:01:01 , а должно 01:05:02. Как я понимаю что то с указаетлем не то, но что конкретно, понять не могу.
Мне кажется, что вы сильно перемудрили.
Почитайте про строки формата для sprintf. А вообще здесь sprintf из пушки по воробьям, в интернете море примеров, как сделать проще
:) Да, не сразу заметил тоже. %2s:%2s:%2s было бы вернее, но реально очень дорого для скетча.
Хотя, да - ради одной этой строчки цеплять целый sprintf жалко.
А очень просто. Функция convert возврвщает указатель на буфер outline. На один и тот же буфер, всегда, все три раза. Соответственно, функция sprintf получает в качестве параметров три одинаковых указателя на outline, и три раза честно выводит то, что в этом буфере лежит на момент вызова.
я этот под себя приспособил. кидаю целиком то что где то нашлось:
Хотя, да - ради одной этой строчки цеплять целый sprintf жалко.
А очень просто. Функция convert возврвщает указатель на буфер outline. На один и тот же буфер, всегда, все три раза. Соответственно, функция sprintf получает в качестве параметров три одинаковых указателя на outline, и три раза честно выводит то, что в этом буфере лежит на момент вызова.
все, понял, сделал "в лоб":