PDA

View Full Version : [C] funzione sprintf


chicco19811
19-01-2016, 19:54
sprintf(var1, var2.arr);

var1 e' una variabile di stack
var2.arr e' un'array di 80 byte, dichiarato sullo stack, ed e' stato riempito appena prima con un strncpy (quindi senza '\0')

mi è stato detto che eseguire sprintf copiando da una variabile dove non e' garantito lo '\0' e' pericoloso, si puo' sporcare lo stack in modo definitivo, corrompendo gli Instruction Pointer delle varie chiamate e corrompendo anche i registri che sono pushati sullo stack assieme ai valori delle variabili

con quale funzione conviene sostituirla?
strncpy è ok?

Grazie

GTKM
21-01-2016, 08:36
char * strncpy ( char * destination, const char * source, size_t num );



No null-character is implicitly appended at the end of destination if source is longer than num. Thus, in this case, destination shall not be considered a null terminated C string (reading it as such would overflow).

fano
03-02-2016, 23:03
Ti direi che la funzione giusto è snprintf() in cui indichi quanto al massimo si può scrivere è una "soluzione" per modo di dire se lo spazio non è sufficiente per mettere il tappo taglia la stringa :cry:

La triste verità è che in C le stringhe non sono venute...