Ecco la soluzione:

strcpy(b, (const char*)a.c_str());

E' molto strano. Ho scritto un programma in C++ con WxDev-C++ compilato con MinGw. Sotto Windows il codice:

wxString a;
char b[256];
strcpy(b, a);

viene compilato tranquillamente mentre sotto Linux è necessario scrivere:

wxString a;
char b[256];
strcpy(b, (const char*)a.c_str());

Come mai?