View Single Post
Old 19-04-2014, 10:49   #11
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13043
Quote:
Originariamente inviato da ingframin Guarda i messaggi
Non ho postato il codice intero, nella versione finale quel puntatore è un array di 32 caratteri.
Il mio problema era la stampa con printf, non il puntatore. Per altro da windows quel codice gira anche senza inizializzare affatto il puntatore (magie di visual studio credo...).
Non pensavo con 2 righe di C di scatenare un putiferio del genere.
Inoltre non capisco perché non usare scanf che è così comoda...
Tranquillo non c'è problema . Riguardo all'ordine della print, sul mio sistema non lo fa, quindi potrebbe essere dovuto alla specifica implementazione (io ho provato su Debian 7), ma ho compilato senza ottimizzazioni attive.

Se non inizializzi il puntatore esso può puntare ovunque, quindi se ti dice bene può darsi che non causi crash, ma ovviamente non puoi confidare in questo.

Riguardo scanf, il problema è che non fa controlli sulla lunghezza del buffer, infatti tu non dici a scanf quanto deve leggere dall'input.

Ora con tutti i meccanismi di protezione di oggi il programma ti crasha in qualsiasi caso se passi più di 32 bytes. Senza quei meccanismi di protezione un attaccante potrebbe causare stack overflow ed eseguire codice arbitrario.

Con fgets invece devi specificare quanto vuoi leggere, quindi è una funzione più sicura, ti consiglio di usare quest'ultima.
WarDuck è offline   Rispondi citando il messaggio o parte di esso