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.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ì:
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 - 1codice: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;![]()
![]()
![]()
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;Divertiti..... comunque grazie di tutto..... ora torno a fare le mie equazioni di 2° grado per domani....![]()
![]()
![]()
![]()