El problema es esta linea:
char *file="file.cpp"
utilizas file como un apuntador a char, pero no le asignas espacio en memoria. En la inicializacion que utilizas, no hay problema, porque la variable apunta a una cadena constante, pero si tratas de cambiarla, es probable que sobrescribas parte de la memoria, y por lo tanto se corrompe y por eso se "traba".
La solucion es que utilices un array de caracteres, o si te decides a seguir usando apuntadores, debes utilizar new/delete.
/// Utilizas un array de caracteres
char file[30];
/// Utilizas apuntadores/memoria dinamica
char* file;
file = new char[30];
/// Debes usar delete cuando ya no quieras usar la memoria
delete file;
Saludos