Sulle mele e pere del BOOL hai ragione, sono caduto in errore perchè se tu dichiari bFailIfExists come un normale bool funziona tutto uguale...misteri della fede :P

Ok, adesso ho capito che l'errore era nella concatenazione delle stringhe, come dicevi tu. E come da te proposto ho risolto tutto con quella funzioncina c_str(). Sinceramente è la prima volta che la vedo, se mi puoi dire che fa in pratica...

Adesso ho risistemato il codice, ho dovuto modificare anche la ricorsione, visto che implementando il codice da te proposto nel mio, non serve più una riformattazione per gli spazi. Adesso funziona tutto. Però sono arrivato a un altro problema, ossia la verifica che il file in questione sia copiato a dovere. Io ho pensato di includere la classe fstrem, dichiarare un ifstream a e aprirlo con la funzione a.open(b.c_str()), dove b è l'indirizzo dove dovrebbe essere stato copiato il file. A quel punto dichiaro un bool ok e lo metto true se la funzione a.fail() non mi genera errore. Cosi uso il booleano ok per il feedback che mi serviva.

C'è un alternativa migliore per risolvere questo problema?

il codice che ho scritto cosi completato con questa ultima parte è questo.

codice:
#include <iostream>
#include <windows.h>
#include <string>
#include <fstream>

using namespace std;

string risistema_stringa(string a);
bool controllo_copia(string b);

int main()
{
    string a;
    getline(cin, a);

    string destinazione = "c:\\incolla\\prova.txt";

    string origine = risistema_stringa(a);

    origine = origine+"\\prova.txt";

    BOOL bFailIfExists = false;
    CopyFile(origine.c_str(), destinazione.c_str(), bFailIfExists);
    

    bool ok = controllo_copia(destinazione.c_str());

    cout<<endl<<ok<<endl;

    return 0;
}

string risistema_stringa(string a)
{
    if(a.length()==0)
        return "";

    else
    {
        if(a.substr(0,1)=="\\")
            return "\\"+risistema_stringa(a.substr(1,1-a.length()));

        else
            return a.substr(0,1)+risistema_stringa(a.substr(1,1-a.length()));
    }
}

bool controllo_copia(string b)
{
    ifstream infile;

    infile.open(b.c_str());

    if (infile.fail())
    {
        return false;
    }

    return true;
}
Il tutto funziona, mi chiedevo solo se esiste un metodo migliore, se c'è qulache errore nel codice o se può andare. Grazie