parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

мне кажется, что это баг :)

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@ :)