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

 
 
 
Reply to this topicStart new topic
> sscanf портит строчку?
Laptop
сообщение Oct 5 2009, 14:16
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 19-11-05
Пользователь №: 11 103



Компилирую под 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.
Что я упустил?
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 5 2009, 15:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А с типизацией и приведением типов у вас все в порядке?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 5 2009, 15:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Размеры стека. Размеры стека и еще раз размеры стека.
P.S.
Это лишнее:
Код
temps[2] = '\0';

как и strncpy()


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Laptop
сообщение Oct 5 2009, 16:55
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 19-11-05
Пользователь №: 11 103



Цитата(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))
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 5 2009, 17:00
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(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. Пока я это писала, вы сами разобрались и успели раньше меня.
Go to the top of the page
 
+Quote Post
Laptop
сообщение Oct 5 2009, 17:19
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 19-11-05
Пользователь №: 11 103



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

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

Значение то само и в char уместится.
Точнее sscanf пытается записать в int, а ему место под char всего лишь отвели. Так что внимательность самое главное smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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