вот что увидел . детально как всегда нет времени.
стал использовать строку в которой формирую спецификатор. Это нужно когда скажем меняем число знаков после запятой и что-то такое.
CODE
unsigned char specif[8];
float in_val;
unsigned char out_line[16];
memset(out_line,0,sizeof(out_line));
memset(specif,0,sizeof(specif));
specif[0]='%';
specif[1]='4';
specif[2]='.';
specif[3]='2';
specif[4]='f';
specif[5]=0;//это очень важно
//строка должна оканчиваться нулем (там выше вся строка обнулена, но это подчеркивает обязательность нуля)
и используем это
CODE
sprintf(out_line,specif,in_val);
важно, чтобы в строке , в которой записывается спецификация, после полезной части был обязательно 0. Собственно, это определение строки. Если нуля нет , то результат будет как я описывал изначально: мусор на неопределенную глубину , причем, результат изменяется от запуска к запуску (собственно программа пошла гулять по озу пока не нарвется на 0).