| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Misha v.3 19.02.2015 01:40 / 19.02.2015 01:46
pa_string.C:unsigned int pa_atoui(const char *str, int base, const String* problem_source){
unsigned int result = 0;
const char *pos = str;
<skipped>
if (base == 16 && *pos == '0') { /* handle option prefix */
++pos;
if (*pos == 'x' || *pos == 'X') {
++pos;
}
}
if (base == 0) { /* dynamic base */
base = 10; /* default is 10 */
if (*pos == '0') {
++pos;
if (*pos == 'x' || *pos == 'X')
++pos;
base=16;
}
}в str приходит "011"if (*pos == 'x' || *pos == 'X') ++pos; base=16;судя по форматированию, должно быть так:
if (*pos == 'x' || *pos == 'X') {
++pos;
base=16;
}в коде из uClibc, крторый, судя по комментярию, был взят за основу, скобочки сейчас стоят правильно: if (base == 0) { /* dynamic base */
base = 10; /* default is 10 */
if (*pos == '0') {
++pos;
base -= 2; /* now base is 8 (or 16) */
#if _STRTO_ENDPTR
fail_char = pos;
#endif
if ((*pos == 'x') || (*pos == 'X')) {
base += 8; /* base is 16 */
++pos;
}
}
}но лучше подождать мнения moko@ :)