Tu pensa che stringa è una variabile che occupa 20 byte in memoria.Originariamente inviato da _d4vid3_
mi stampa a video la sequenza di 'a' seguita da alcuni caratteri "strani" (YA ecc...)?
inoltre in questo caso qui il terminatore non è presente giusto?
grazie ancora![]()
La memoria non è tutta inizializzata a 0 (lo è all'avvio del PC, inizializzata al POST del BIOS, ma poi con il caricamento/scaricamento di moduli, dll ecc... dal SO si sporca con valori)
Il terminatore è semplicemente un valore standard (0x0, che non è 0 il quale è un carattere ascii che vale 0x30 in hex) che usano tutte le funzioni che lavorano con le stringhe (quasi tutte) per identificare che una stringa sia finita.
Volendo dichiarando una stringa di 20 caratteri (che alla fine è un puntatore) potresti anche accedere al carattere 21 o 22 o 1203123, l'unico problema che incontri è che ci sono alcune locazioni in memoria a cui non puoi accedere, perchè sono protette.
scanf stampa ogni byte iniziando dal primo di quella stringa, fin quando incontra il terminatore (0x0). se tu inizializzi così la stringa, lui non incontra il terminatore e continua accedendo al carattere 21, 22, 23 ecc.. fin quando non l'incontra.