Estás a programar em windows ou *unix?
Manipular assim ficheiros :cof cof: é uma porcaria.
aux = malloc((strlen(argv[2]) + 1) * sizeof(char));
Troca por :
aux = (char*) malloc( (strlen( argv[2] ) + 1 ) * sizeof(char));
strncpy(aux, argv[2], (strlen(argv[2]) - 2));
strcat(aux,"out");
Isto não passa o limite do teu aux?
O resto assumo que esteja tudo correto, já não me lembro muito bem de trabalhar assim com ficheiros!