Quote:
Originariamente inviato da ingframin
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.