Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
ti mostro in C++, come premessa ti dico di scordare la funziona gets che è la più bacata al mondo, e quando si usa C++ si può evitare di reinventarsi le stringhe con i puntatori a carattere perchè c'è la classe string.
ti mostro in C++, come premessa ti dico di scordare la funziona gets che è la più bacata al mondo, e quando si usa C++ si può evitare di reinventarsi le stringhe con i puntatori a carattere perchè c'è la classe string.
Codice sorgente - presumibilmente C++
#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <string>
usingnamespace std;
[...]
string testo;
getline(cin, testo);
MessageBox(NULL, testo.c_str(), "Error", MB_OK);
[...]
grazie mille! cmq xke hai detto che gets è bacata? devo usare getline?
nel codice che hai messo, a che serve:
- using namespace std;
- #define STRICT
- #define WIN32_LEAN_AND_MEAN
- testo.c_str()
grazie mille! cmq xke hai detto che gets è bacata? devo usare getline?
nel codice che hai messo, a che serve:
- using namespace std;
- #define STRICT
- #define WIN32_LEAN_AND_MEAN
- testo.c_str()
sono funzioni proprio del c++ vero? non del c..
gets è una funzione del C.
c_str, se non mi sbaglio serve a generare una stringa in stile C.
Beh, il namespace per dirla grossolanamente, serve a memorizzare tutti i nomi usati per variabili, funzioni ecc. in una parte di memoria e quindi evitare contrasti tra i nominativi assegnati.
la gets è l'esempio per antonomasia di buffer
overflow, quindi se l'utente inserisce una stringa ben studiata può pastrocciare sullo stack fare degli exploit e eseguire codice arbitrario (il tuo non sarà un programma chissà che importante che magari gira come servizio coi permessi root, però è bene imparare a usare codice corretto subito).
In generale le funzioni per operare sulle stringhe intese come char* in C sono bacate sempre da buffer overflow, format string bug e tanti altri errori (non a caso sistemi come openbsd le reimplementa correggendo questi problemi), se usi una di queste:
il tuo programma sarà a rischio bug; inoltre è più "bestemmioso" stare a reinventarsi le stringhe con i puntatori a carattere; alcuni tireranno fuori la storia delle performance, ma oltre che più sicuro è meglio usare codice scritto al meglio interno allo standard C++ che usare codice proprio C scritto molto probabilmente male, e poi coi PC di oggi non si nota tutta questa differenza.
Per quanto riguarda c_str() bisogna tenere conto che per dare compatibilità al vecchio codice scritto in C o che cmq adotta il vecchio stile char* bisogna dare un sistema per tornare indietro da string a char*, ed ecco quindi il metodo c_str(); e nonostante il passo avanti con la classe string, di default "" è char* (dal D finalmente "" è classe string)
Per le define di win, STRICT non ricordo cosa serve ricordo però che la guida che avevo letto sull win32 api indicava quei 2 define come "prologo", mentre WIN32_LEAN_AND_MEAN serve a dire a windows.h di non includere delle fu nzionalità usate di rado, ma quindi solo "lo stretto indispensabile"
Testo quotato
sono funzioni proprio del c++ vero?
Per fare certe cose C++ deve appoggiarsi direttamente alle API del sistema operativo o indirettamente tramite librerie di terzi.
Quindi sono proprie del C++ e non del c il namespace std, la classe string e il suo metodo c_str
windows.h è un header di windows per utilizzare le sue funzioni, costanti, variabili ecc... con il C++
Ultima modifica effettuata da netarrow il 08/10/2007 alle 16:16