реклама на сайте
подробности

 
 
> sprintf от Keil, мусор после полезной строки
firstvald
сообщение Nov 18 2014, 23:07
Сообщение #1


Знающий
****

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



во франклине (для работы с плав арифметикой не использую, но спецэффект видел) и в кейле сталкиваюсь с тем, что sprintf мусорит в строке после полезной части. при выводе плавающего числа со спецификатором f4.1 после полезной части кидается еще байт так 9 мусора. обычно обхожу это тем, что завожу большую строку с запасом, фактически для вывода плавающего числа по спецификатору f4.1 требуется строка длиной 24 байта (с некоторым запасом), но может быть кто- то нашел лечилку?


в порядке пожарного бубна

может кому срочно поможет, как посмотрю подробнее еще отпишусь. вроде бы мусор исчезает, если вызвать последовательно сначала sprintf без поля точности: sprintf(...,"%f",....) и сразу же еще раз, но уже как нам нужно sprintf(...,"%4.3f",...).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
firstvald
сообщение Dec 7 2014, 10:10
Сообщение #2


Знающий
****

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



вот что увидел . детально как всегда нет времени.

стал использовать строку в которой формирую спецификатор. Это нужно когда скажем меняем число знаков после запятой и что-то такое.

CODE
unsigned char specif[8];
float in_val;
unsigned char out_line[16];

memset(out_line,0,sizeof(out_line));
memset(specif,0,sizeof(specif));

specif[0]='%';
specif[1]='4';
specif[2]='.';
specif[3]='2';
specif[4]='f';
specif[5]=0;//это очень важно
//строка должна оканчиваться нулем (там выше вся строка обнулена, но это подчеркивает обязательность нуля)


и используем это

CODE
sprintf(out_line,specif,in_val);


важно, чтобы в строке , в которой записывается спецификация, после полезной части был обязательно 0. Собственно, это определение строки. Если нуля нет , то результат будет как я описывал изначально: мусор на неопределенную глубину , причем, результат изменяется от запуска к запуску (собственно программа пошла гулять по озу пока не нарвется на 0).
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 7 2014, 13:49
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(firstvald @ Dec 7 2014, 13:10) *
важно, чтобы в строке , в которой записывается спецификация, после полезной части был обязательно 0. Собственно, это определение строки. Если нуля нет , то результат будет как я описывал изначально: мусор на неопределенную глубину , причем, результат изменяется от запуска к запуску (собственно программа пошла гулять по озу пока не нарвется на 0).

Танцы с бубном. Очевидно, что, скорее всего, кто-то ещё гадит в стеке.
Ну и товарищ Борщ уже написал, как это правильно делается :-)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.02622 секунд с 7
ELECTRONIX ©2004-2016