|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 35
|
[c++]Concatenare due stringhe
Vorrei concatenare due stringhe in C++ senza usare <string>
Codice:
wchar_t s1 = _T("\\con\\");
wchar_t s2 = _T(\\test1\\prova.mio");
int dimADL = wcslen(s1);
int dimDic = wcslen(s2);
wchar_t* s3 = new wchar_t[dimADL + dimDic +1];
wcscat(s3,s1);
wcscat(s3,s2);
__________________
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
La prima la "copy" e la seconda la "concateni"... visto che s3 non viene "azzerato", non sai cosa contenga.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 35
|
Volevo fare quell'operazione senza usare le funzionalità offerte dalla libreria <string>.
il codice che ho scritto prima funziona. M funziona per caso o perché l'ho fatto nel modo giusto?
__________________
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
La funzione "cat", ricerca lo "zero" di una stringa gia' presente, ci si posiziona sopra, e aggiunge la seconda stringa.
Ora, s3, non e' inizializzato... e con un'allocazione dinamica la memoria non viene "pulita", azzerata, da cio' che era presente. Per cui se hai uno "zero", per caso, nel primo carattere di s3, tutto funziona magicamente... ma se trova un altro tipo di dato non funziona piu' e puo' provocare problemi anche seri, andando a concatenare, sovrascrivere in memoria, un dato a partire dal primo ZERO che incontra... e che non sai quale possa essere... anche OLTRE la memoria da te allocata. Per cui devi copiare la prima stringa in s3 per assicurare un tipo di dato corretto per la concatenazione, e la seconda stringa la puoi concatenare senza problemi. (altrimenti annulli il primo carattere di s3, dopo l'allocazione... e lasci le due "cat"... ma e' meno efficiente e "stilisticamente" poco valida, anche se funzionerebbe) Ultima modifica di BrutPitt : 24-04-2009 alle 17:43. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:00.




















