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

 
 
> Странная работа оператора strtol, avr gcc
Skaf
сообщение Oct 22 2010, 17:06
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Всем привет. Пишу подпрограмму для конвертирования строки типа "00:1c:4f:a2:23:12" в 6 байт.

Использую функцию strtol

Код
unsigned long strtoul (const char * __nptr,  char ** __endptr,  int __base)


Судя по описанию __nptr указатель на строку, __endptr указатель на следующий символ после которого в строке не надо делать обработку, __base - система счисления строки

Долго боролся с глюками, в итоге соорудил маленький код в котором проявляется странное на мой взгляд поведение функции strtol. Объясните, пожалуйста, почему она модифицирует саму строку?

Строка- mac. Запись идет в data. Почему в mac изменяются 2 байта, а именно тот, на который указывает __endptr и следующий за ним? (код в картинке. Там же красным помечены изменившиеся байты из-за действий функции strtol)

PS- Последние 2 строки кода бессмыслены и существуют только для того, чтобы там поставить точку останова.

Сообщение отредактировал Skaf - Oct 22 2010, 17:07
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Oct 22 2010, 17:39
Сообщение #2


Гуру
******

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



Вы неправильно понимаете значение всех параметров этой функции. Почитайте ее описание, например, тут. Второй параметр функции это указатель на указатель, который служит для возврата значения указателя, который содержит адрес последнего непреобразованного символа в строке. Вместо того, чтобы передать адрес указателя, вы передаете в функцию его значение.
Измените строку
Код
*data=(unsigned char)strtol((const char *)ptr1, &ptr2, 16);


Опс! Тормознул с ответом. Уже ответили smile.gif
Go to the top of the page
 
+Quote Post



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

 


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


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