<html>
<head>
<meta content="text/html; charset=ISO-8859-2"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<font face="Helvetica, Arial, sans-serif">Podle me by melo jit
pouzit funkci memmove(), ktera umi kopirovat prekryvajici se
oblasti...<br>
<br>
Hynek<br>
<br>
<br>
</font>
<div class="moz-cite-prefix">Dne 3.11.2016 11:57, Miroslav Mraz
napsal(a):<br>
</div>
<blockquote cite="mid:d746d8d6-bbb7-d211-e8fa-2894c4c2944b@volny.cz"
type="cite">A nejen v oblasti mcu. Zrovna včera jsem hledal chybu
v jednom projektu - je to jakýsi nástroj pro PLC, jehož historie
se zřejmě táhne do časů MSDOS. Tak jsem to chtěl upravit aby to
mohlo běžet i v nějakém normálním prostředí (především linux) a
narazil jsem - prostě to vyhazovalo chyby. Protože to má celé asi
13000 řádek kódu, chvíli mi trvalo než se podařilo chybu izolovat
- ukázalo se, že problém je v knihovní funkci strcpy(char* dest,
const char* src), která opravdu do dest uložila něco jiného než
bylo původně v src.
<br>
To bylo docela neočekávané, ale stačí se podívat do manuálu -
řetězce se nesmí překrývat. A zde je jádro pudla. Ten, kdo nástroj
kdysi tvořil prostě na tohle kašlal. Protože "taky to funguje" a
ve windows to opravdu funguje. Nedalo mi to se nepodělit, protože
upřímně řečeno takhle někdy "prasím" taky. A kdo ne, ať hodí
kamenem.
<br>
<br>
A nevím, zda je to nekompetentnost, lenost nebo se jen věci
vyvíjejí a jak už to bývá zvykem, obvykle k horšímu. Protože
workaround spočívá v tom, že strcpy() nahradím prostým kopírováním
byte po bytu. Což asi původně tak i bylo.
<br>
<br>
Mrazík
<br>
</blockquote>
<br>
</body>
</html>