Если я правильно понял полёт Вашей мысли, то её можно выразить как-то так:
Код
if(px->prec < 0) px->n1 = strlen(px->s);
else if(px->prec == 0) px->n1 = px->prec; // :)
else
{
s1 = (char *) memchr((void *) px->s, '\0', px->prec); // к чему эти упражнения с (char *) и (void *) ?
px->n1 = (type_of_px->n1) (s1 - px->s); // надеюсь, n1 - не unsigned
}
Возможно, такой вид упростит Вам осмысление и отладку Вашего кода.
ЗЫЖ оформляйте, плз, код тегами code /code (крайняя правая иконка под выпадающим списком "Шрифт") или codebox /codebox (для длинных простыней; живёт в выпадающем списке "Спец. элементы")