tiens d'ailleurs vas voir la: http://c.developpez.com/faq/bcb/?page=donneeschaines
on peut y lire:
Attention ! La méthode c_str retourne un pointeur sur une
chaîne C, qui n'est valable que pour l'instruction suivant l'appel à
c_str. En d'autres termes, vous ne pouvez pas faire ceci :
AnsiString Src =
"Source.txt";
AnsiString Dest =
"Destination.txt";
char * pSrc = Src.c_str();
char * pDest = Dest.c_str();
// instructionsCopyFile(pSrc,pDest,true);
En effet, au moment où
CopyFile est exécutée,
pSrc et pDest pointent sur un emplacement mémoire dont le contenu est indéfini.
Il se peut très bien que la mémoire ait été écrasée entre les
instructions c_str et l'appel à CopyFile. Ce ne sera pas toujours le
cas, et le programme peut très bien fonctionner parfaitement pendant
très longtemps, et planter de façon aléatoire...
Pour résoudre ce problème, il faut utiliser la fonction
strcpy :
AnsiString Src = "Source.txt";
AnsiString Dest = "Destination.txt";
char * pSrc = new char[Src.Length()+1]; // +1 pour le 0 terminal
char * pDest = new char[Dest.Length()+1];
strcpy(pSrc,Src.c_str());
strcpy(pDest,Dest.c_str());
// instructions
CopyFile(pSrc,pDest,true);
delete[] pSrc;
delete[] pDest;
a +
