Casto se take v mnoha programech setkate s konstrukci tohoto typu:
...
char str[1024];
... /* naplneni stringu str z uzivatelskeho vstupu/souboru/argumentu z prikazove radky apod. */
printf(str);
...
To je nebezpecne z toho duvodu, ze uzivatel vysledneho programu muze naplnit string str zaludnou posloupnosti znaku obsahujici veci jako "%d" apod., ktere zpusobi, ze veci na zasobniku (interni lokalni promenne funkce printf(), navratova adresa) jsou dale povazovany za dalsi argumenty printf(). Funkce printf() tim padem pouzije jinou (nespravnou) adresu. Je to sloziteji zneuzitelne, ale lze to.
Bezpecne je psat volani printf() takto:
printf("%s", str);
Duvod bezpecnosti teto konstrukce je snad kazdemu c-ckari jasny. Samozrejme se to vse tyka i pribuznych funkci sprintf(), fprintf() atd.
Mozna to vse nerikam moc presne, ale blizsi/presnejsi informace najdete na Internetu, napr. na http://www.linuxsecurity.com/docs/LDP/Secure-Programs-HOWTO/control-formatting.html