|
sprintf от Keil, мусор после полезной строки |
|
|
|
Nov 18 2014, 23:07
|

Знающий
   
Группа: Свой
Сообщений: 580
Регистрация: 3-06-08
Пользователь №: 38 041

|
во франклине (для работы с плав арифметикой не использую, но спецэффект видел) и в кейле сталкиваюсь с тем, что sprintf мусорит в строке после полезной части. при выводе плавающего числа со спецификатором f4.1 после полезной части кидается еще байт так 9 мусора. обычно обхожу это тем, что завожу большую строку с запасом, фактически для вывода плавающего числа по спецификатору f4.1 требуется строка длиной 24 байта (с некоторым запасом), но может быть кто- то нашел лечилку?
в порядке пожарного бубна
может кому срочно поможет, как посмотрю подробнее еще отпишусь. вроде бы мусор исчезает, если вызвать последовательно сначала sprintf без поля точности: sprintf(...,"%f",....) и сразу же еще раз, но уже как нам нужно sprintf(...,"%4.3f",...).
|
|
|
|
|
 |
Ответов
|
Dec 7 2014, 10:35
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
А зачем все эти телодвижения с обнулением памяти и записью массива? По идее достаточно такого: Код char specif[] = "%4.2f"; ну или такого, слегка параноидального: Код const char specif[] = "%4.2f\0"; возможно у вас массивы заданы как локальные переменные (в стеке), либо каким-то образом повреждается сегмент статических данных.
|
|
|
|
|
Dec 7 2014, 11:31
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(psL @ Dec 7 2014, 12:35)  По идее достаточно такого: По идее достаточно прочитать документацию. Но это для слабых. Суровые русские мужики чешут правое ухо левой ногой, изобретая свой велосипед. Код int digits = 4; int decimals = 2; sprintf(out_line, "%*.*f", digits, decimals, in_val);
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 7 2014, 12:30
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
Цитата(Сергей Борщ @ Dec 7 2014, 14:31)  По идее достаточно прочитать документацию. Но это для слабых. Суровые русские мужики чешут правое ухо левой ногой, изобретая свой велосипед. Код int digits = 4; int decimals = 2; sprintf(out_line, "%*.*f", digits, decimals, in_val); По идее изменение формата sprintf не спасет буфер от поломки
|
|
|
|
Сообщений в этой теме
firstvald sprintf от Keil Nov 18 2014, 23:07 scifi Что-то не верится, что в кейле может быть такой гл... Nov 22 2014, 10:50 firstvald вот что увидел . детально как всегда нет времени.
... Dec 7 2014, 10:10 scifi Цитата(firstvald @ Dec 7 2014, 13:10) важ... Dec 7 2014, 13:49 jcxz Цитата(firstvald @ Dec 7 2014, 16:10) важ... Dec 13 2014, 19:38 Сергей Борщ Цитата(psL @ Dec 7 2014, 14:30) По идее и... Dec 7 2014, 12:46 jcxz Цитата(firstvald @ Nov 19 2014, 05:07) во... Dec 7 2014, 18:40 firstvald Цитата(jcxz @ Dec 7 2014, 22:40) Возможно... Dec 8 2014, 17:19  scifi Цитата(firstvald @ Dec 8 2014, 20:19) Код... Dec 8 2014, 18:08   firstvald Цитата(scifi @ Dec 8 2014, 22:08) Под сто... Dec 8 2014, 19:17    Сергей Борщ Цитата(firstvald @ Dec 8 2014, 21:17) ну ... Dec 8 2014, 19:26
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|