Поклонники продукции Microchip Technology Inc тусуются тут.
Вс июл 16, 2017 03:23:54
Доброго времени суток, подскажите как ограничить размер строки в функциях sprint,print. Вроде должно быть что то вроде snprint, но такой в компиляторе нет.И как ограничить выводную переменную.То есть buf_2=-25365, а вывести мне надо -253 или последние 65.
Код такой использую:
char mass_buf[15]; //массив
int buf_1; // переменная 1
int buf_2; // переменная 2
.......
.......
sprintf(mass_buf,"b_1=%x b_2=%d",buf_1,buf_2);
.......
.......
Если строка больше массива, то "портятся" другие регистры.
Пробовал запись b_1=%2x. Но число выводится полностью.
Вс июл 16, 2017 07:39:56
как ограничить выводную переменную.То есть buf_2=-25365, а вывести мне надо -253 или последние 65.
[...]
Пробовал запись b_1=%2x. Но число выводится полностью.
Согласно спецификации 2 здесь гарантированная ширина поля вывода а не максимально доступная. Поэтому и "распирает".
A "oтбить сотые" можно делением:
- Код:
printf("%d.%02d", buf_2 / 100, buf_2 % 100);
Пн июл 17, 2017 16:51:14
А зачем взваливать всё это на sprintf ? Что мешает просто вывести 4 первых символа в массиве ?
Вт июл 18, 2017 08:26:46
Siarzhuk, такой вариант рассматривал.Но он требует математических операций, в принципе при достатке памяти можно и воспользоваться. Как понял что в XC8 sprint,print вводимую строку нельзя ограничить, что бы не "портить" старшие регистры при переполнении массива.
Аlex, ничего не мешает.Цель обучится работе с компилятором XC8.
Вт июл 18, 2017 09:54:59
EclipsV, компилятор тут не при чём. sprintf в любом компиляторе не умеет ограничивать строку, а не только в XC.
Вт июл 18, 2017 10:05:50
Siarzhuk, такой вариант рассматривал.Но он требует математических операций, в принципе при достатке памяти можно и воспользоваться.
Перефразируя известную пословицу: Связавшись с printf-ом по байтикам не плачут. В XC8 printf конечно уоптимизированый и хитро-встраиваемый, но printf - это printf - загляните в map-файл сколько чего он за собой тащит при использовании его в проекте.
Как понял что в XC8 sprint,print вводимую строку нельзя ограничить, что бы не "портить" старшие регистры при переполнении массива.
Практика - критерий истины. © Увы.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.