Цитата(Skaf @ Oct 22 2010, 21:06)
Всем привет. Пишу подпрограмму для конвертирования строки типа "00:1c:4f:a2:23:12" в 6 байт.
Судя по описанию __nptr указатель на строку, __endptr указатель на следующий символ после которого в строке не надо делать обработку, __base - система счисления строки
Долго боролся с глюками, в итоге соорудил маленький код в котором проявляется странное на мой взгляд поведение функции strtol. Объясните, пожалуйста, почему она модифицирует саму строку?
Нет, __endptr - это не указатель на следующий символ, а указатель на указатель! Оттого-то перед ним стоят две звездочки, а не одна.
Заведите себе ОТДЕЛЬНЫЙ указатель, назовите его хотя бы endptr, например так:
char *
endptr;
А в функцию strtoul подставите его АДРЕС, например вот так:
rusult = long strtoul("00:1c:4f:a2:23:12", &
endptr, 16);
Тогда фунция ПОЛОЖИТ в endptr указатель на следующий символ после конвертированного.
Следующие числа можно будет достать так:
rusult = long strtoul(endptr+1, &endptr, 16);
где 1 прибавляется для пропуска двоеточия.