nn so cosa sia.....meglio passare alla cin del c++ no??![]()
Altrettanto a te.ciao e buon primo maggio![]()
nn so cosa sia.....meglio passare alla cin del c++ no??![]()
Altrettanto a te.ciao e buon primo maggio![]()
Originariamente inviato da olly
nn so cosa sia.....![]()
codice:#include <iostream.h> int main(){ int i; cout << prova stampa in c++ << endl; cin >> i; //lettura di una var in c++,in c si fà con scanf }![]()
![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
L'insicurezza è talmente diffusa che le nuove generazioni di processori avranno un flag che servirà a marcare un blocco di memoria come dati o programmi!
Nell'Athlon 64 esiste già, e il service pack 2 di Windows XP la attiva.
In questo modo qualunque istruzione di scrittura memoria non potrà MAI sovrascrivere una sezione di codice, perchè verrà bloccata!!!
Ciao!
"Le uniche cose che sbagli sono quelle che non provi a fare."
Atipica
[QUOTE]per capire, considera come è disposta la memoria di un programma in esecuzione:
prima vengono i dati, poi il codice eseguibile.
Io ho letto su una rivista informatica che un programma in runtime può essere distinto in strutture logiche:
il codice viene generalmente caricato in testa alla memoria e contiene le istruzioni in linguaggio macchina da far eseguire sulla CPU; poi segue l'area in cui sono contenute le variabili del programma dette "statiche", come stringhe di testo, vettori di dimensione ecc.....
Cosa sono questi vettori di dimensione??
Poi un'altra cosettina nn mi è chiara raga:
Quando si effettua una chiamata a funzione si utilizza un' istruzione Assembler di tipo CALL, che serve per stoppare il programma a quel punto e per passare il controllo alla funzione chiamata, dopo aver salvato lo stato corrente e l'indirizzo di ritorno.
A cosa serve questo indirizzo di ritorno?? Per ritornare alla funzione principale, ma che significa all'atto pratico.....
Grazie ragazzi.![]()
Cosa siano i "vettori di dimensione" non saprei proprio dirtelo...
Mi pare un errore di stampa o qualcosa del genere...
Invece, il senso dell'indirizzo di ritorno è molto semplice da spiegare: come ben saprai, il processore ha un registro interno che gli dice quale sarà la prossima istruzione da eseguire. Quando tu usi una CALL, ciò che accade è che questo registro viene modificato per puntare non più alla istruzione dopo la CALL, ma invece alla prima istruzione della funzione chiamata; è evidente però che alla fine della funzione non può essere la funzione stessa a sapere a che istruzione deve ritornare, visto che la funzione, per sua stessa natura, deve poter essere chiamata da più parti. Ecco che torna quindi utile l'indirizzo di ritorno che era stato messo da parte prima, visto che ci permette di ritornare esattamente alla istruzine successiva alla CALL che aveva chiamato la funzione.
Chiaro?
![]()
"Le uniche cose che sbagli sono quelle che non provi a fare."
Atipica
Non concordo su tutte
strcpy // possibile overflow
lstrcpy // possibile overflow
lstrcpyA // possibile overflow
lstrcpyW // possibile overflow
lstrcpyn // può lasciare sterminata la stringa di destinazione
lstrcpynA // può lasciare sterminata la stringa di destinazione
lstrcpynW // può lasciare sterminata la stringa di destinazione
wstrcpy // possibile overflow
strncpy // può lasciare sterminata la stringa di destinazione
wstrncpy // può lasciare sterminata la stringa di destinazione
sptrintf // possibile overflow
swptrinf // possibile overflow
gets // possibile overflow
getws // possibile overflow
strcat // possibile overflow
lstracat // possibile overflow
lstrcatW // possibile overflow
wcscat // possibile overflow
strncat // può lasciare sterminata la stringa di destinazione
wstrncat // può lasciare sterminata la stringa di destinazione
memcpy // Questa è sicura secondo me
memmove // BOH, è usara rarissimamente (mai usata)
scanf wscanf // dipende, può lasciare stdin sporco (warning)
fgets // dipende, può lasciare stdin sporco (warning)
Memcpy è sicura, anche perkè senò saremmo messi male. E' una funzione importantissima.
fgets e scanf possono essere usate ma con attenzione.
Stdio.h è una bella libreria, facile da usare, da "insegnare" ed è portabile al 100%. (a scuola ci insegnano questo tipo di io standard, erroneamente secondo me).
Il problema è che non ha solo vantaggi, e per una programmazione seria non va bene.
Per l'IO è meglio usare le SC di basso livello che seppur più difficili da programmare, offrono più controllo su quello che si fa, quindi più sicurezza e prestazioni.
ADIOS !!
![]()
Grazie Shores.![]()
Che significa può lasciare sterminata......strncpy // può lasciare sterminata la stringa di destinazione
scanf wscanf // dipende, può lasciare stdin sporco (warning)
Che cos'è questo stdin??
Ciao e grazie a tutti.![]()