Originariamente inviato da kirakira93
esatto.... ho scitto una cavolata..... basta fare sz1[iGrandezzaDisz2] '\0'.....
ma a questo punto mi viene un dubbio..... non bastava fare così:

codice:
TCHAR * sz2=NULL, * sz1=NULL;
try
{
    sz2 = new TCHAR [500];
    _tcscpy(sz2,"ciao");
    sz1 =  new TCHAR [500];
    _tcsncpy(sz1,sz2,500);
    sz1[_tcslen(sz2) - 1] = '\0';
    /*lo strlen() per il TCHAR adesso non ricordo.... mi pare _tcslen()*/
    MessageBox(NULL,sz1,"In questo caso un LoL ci sta propio a pallino!",0);
}
catch(std::bad_alloc & ex)
{
    MessageBox(NULL, "Impossibile allocare la memoria necessaria", "Errore", MB_ICONERROR);
}
delete [] sz2;
delete [] sz1;
E anche l'xD ci sta bene.... bisogna scrivere _tcsncpy(sz1,sz2,500); non _tcsncpy(sz1 - 1,sz2,500);..... xD anche se non ho capito bene cosa fa sz1 - 1
Non ci siamo capiti... il sz1[/* bla bla bla*/]='\0'; serve per terminare la stringa qualora già non fosse terminata; e proprio in questo caso la _tcslen non sarebbe in grado di determinare quando la stringa finisce, proprio perché il terminatore finale sarebbe assente.
Comunque basta aggiungere un '\0' di precauzione sull'ultimo carattere allocato del buffer, in maniera tale da terminare lì con sicurezza la stringa.
codice:
sz1[499]=0;
.... comunque grazie di tutto..... ora torno a fare le mie equazioni di 2° grado per domani....
Divertiti.