Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: sscanf портит строчку?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Laptop
Компилирую под IAR AVR 5.30 без дополнительных патчей.
Вроде все просто и должно работать....

strncpy(temps,"89",2);
temps[2] = '\0';
printf(" %02X%02X + ",temps[0],temps[1]);
sscanf(temps,"%X",&xxx);
printf(" %02X%02X - ",temps[0],temps[1]);

А в результате... " 3839 + 0039 -"
Т.е. до использования sscanf все нормально, а после использования первый символ в 0.
Что я упустил?
rezident
А с типизацией и приведением типов у вас все в порядке?
zltigo
Размеры стека. Размеры стека и еще раз размеры стека.
P.S.
Это лишнее:
Код
temps[2] = '\0';

как и strncpy()
Laptop
Цитата(zltigo @ Oct 5 2009, 19:31) *
Размеры стека. Размеры стека и еще раз размеры стека.
P.S.
Это лишнее:
Код
temps[2] = '\0';

как и strncpy()

Стек 2 КБ. Библиотеки medium.
Так что уж и не знаю на что думать....

smile.gif Исходник был несколько больше, для проверки упростил оставив часть кода.

Цитата(rezident @ Oct 5 2009, 19:22) *
А с типизацией и приведением типов у вас все в порядке?

Да вроде нормально. В настройках компилятора стоит plain char unsigned если это важно.
sscanf то сам нормально все получает, а вот строчка получает 0 по первому адресу, будто он ее обнуляет.

Объявления переменных в теле функции.

char temps[11];
unsigned char temp, xxx;

То ли лыжи, то ли... smile.gif

Изменение на unsigned int xxx;
и все стало как и должно было быть smile.gif

Видать все же типы и еще раз типы... Не думал что на такой фигне попадусь smile.gif

Всем большое спасибо smile.gif А мне спать больше надо smile.gif))
Xenia
Цитата(Laptop @ Oct 5 2009, 20:31) *
Объявления переменных в теле функции.

char temps[11];
unsigned char temp, xxx;

То ли лыжи, то ли... smile.gif


Небось просто не лезет челое число в unsigned char, потому и портит что-то за его пределами.
Формат %X это все равно для целых, хучь они из шестнадцатеричного формата вводятся.
В таких случаях надо либо либо переменную xxx сделать типа int, либо загружать scanf'ом во временную переменную типа int, а потом уж его передавливать в xxx.

P.S. Пока я это писала, вы сами разобрались и успели раньше меня.
Laptop
Цитата(Xenia @ Oct 5 2009, 21:00) *
Небось просто не лезет челое число в unsigned char, потому и портит что-то за его пределами.
Формат %X это все равно для целых, хучь они из шестнадцатеричного формата вводятся.
В таких случаях надо либо либо переменную xxx сделать типа int, либо загружать scanf'ом во временную переменную типа int, а потом уж его передавливать в xxx.

P.S. Пока я это писала, вы сами разобрались и успели раньше меня.

Значение то само и в char уместится.
Точнее sscanf пытается записать в int, а ему место под char всего лишь отвели. Так что внимательность самое главное smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.