一个关于freopen代码的问题……

这是一个可以将拷贝内容快速输出为txt的C++文件
但是在以输入数据作为输出文件的文件名这部分出现了问题
求解答如何实现“以输入数据作为输出文件的文件名

以下是代码

#include<bits/stdc++.h>
using namespace std;
string fn,a[100001];
int n=1;
int main(){
    cout<<"输出文件名:"; 
    cin>>fn;
    fn+=".txt"; 
    cout<<endl<<"文件内容:"<<endl;
    for(;;n++){
        getline(cin,a[n]);
        if(a[n]=="/end")
        {
            n-=1;
            break;
        }
    }
    freopen(fn,"w",stdout);
    for(int i=1;i<=n;i++)
    {
        cout<<a[i]<<endl;
    }
    return 0;
} 

以下是运行报错

[Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'FILE* freopen(const char*, const char*, FILE*)'

fn.c_str()