Funkce strcat() nefunguje, jak by měla

Dobrý den, před nedávnem jsem se dotazoval jak nastavit AD převod u PIC 18f97J60. Nakonec se mi to podařilo a převod funguje. Bohužel se objevil další problém. Výsledek z převodníku proženu funkcí a získám číslo ve formátu např. float. Potom bych chtěl toto číslo vypsat na displej (2 řádkový dispej 2 x 16 ). Obsluhu displeje mám vyřešenou. Bráním se použít funkci sprintf na převod na “string”. Udělal jsem si svoji funkci na tento převod…

char Text1[20];

void f_to_a(char *ch,float c,unsigned char m)
{
unsigned int i,nasobek=1;
char buf[20];
float cislo=c;
int des;

for (i = 0; i < m; i++)
{
nasobek*=10;
}
des=(int) cislo;
itoa(des,buf);
strcpy(ch,buf);
if (m)
{
cislo-=des;
des=(int)((cislo+0.5/nasobek)*nasobek);
        strcat(ch,(char *)"."); //problem
        itoa(des,buf);
strcat(ch,buf);
}

}

        f_to_a(Text1,floatcislo,2);
     	strcpy((char *)LCDText,Text1);
LCDUpdate();

problém nastává s instrukcí strcat(ch,(char *)".") Na displeji se objeví správná celá část čísla, ale tečka a desetinná část nikoliv. místo toho pár “paznaků”. Bez onoho inkriminovaneho řádku funkce funkguje, jen jsou obě části neodděleny (příklad: 2232…chci 22.32)Nejsem si vědom nějaké výrazné chyby. Překladač nehlásí error ani warning. Poradíte někdo. Asi je to stupidní dotaz, ale už nějak nevím co dělám vlastně špatně.

Děkuji

:arrow_right: administrator: přejmenováno z "funkce strcat"

docela tě chápu ale tyhle fukce mají i vedlejší vlivy ! vkládání znaku na konec řetězce také není jen tak je totiž vložen i znak konce řetezce a podobné věci !

Moc to zatím nechápu ale ten problém mám také ikdyž jsem na to šel odlišně od tebe ! v mem případě jsem z hrůzou zjistil že mi ta fukce modifikuje i jiná místa v RAM !
další necnost je že samotný řetězec je řazen obráceně - když tedy chceš vědět kde jsou jednotky musíš zjistit délku řetězce a pak teprve umístit desetinou tečku (čárku) docela neohrabaný

To ele nejhorší je asi to že jen vyvolání funkce s řetězci vede k zaplnění paměti pro kod 44% totéž se stane když převod na dec provedu ručně zkrze C

přitom stejná operace v asm má jen asi 50řádků

toto mně děsí

Tato problematika se nedávno probírala v sekci “AVR”. Tam najdeš i odpověď: http://forum.mcontrollers.com/t/ako-zobrazit-desatinne-cislo-na-displeji-s-hd44780-v-c/962/1