2016-11-05 3 views
-3

これは何らかの理由で機能しません。私の教科書に従えば、私はかなり確信しています。ファイルに書き込もうとしたときに何が問題になったのですか?C++

void write(string s) { 
    cout << "\ntype filename"; 
    string filename; 
    scanf("%s", &filename); 
    FILE *outfpt; //new file 
    outfpt = fopen(filename.c_str(), "w"); 
    printf("Address of file is %p\n", outfpt); 

    fprintf(outfpt, "%s", s.c_str()); 
    fclose(outfpt); 

} 
+5

いいえ、私はあなたの教科書が 'std :: string'で' scanf() 'を使用するよう指示していないと確信しています。そのような教科書は欠陥品として返却されるべきです。 –

+0

あなたは本当にCのものとC++のものを扱う必要があります。なぜなら、このように混ぜ合わせることはできないからです。 – tadman

+0

よく教科書はc/C++ – DZD

答えて

2

scanf("%s", &filename);これは間違っています。 scanfとその親族は組み込み型でのみ使用できます(std::string、標準ではあるが、intのように組み込まれていない)。

あなたが入力として単純な文字列を受け入れるようにしたい場合は他の人があなたが入力にcinを使用する必要があります述べたように、cin >> filename;

+0

よろしくお願いいたします。だからgetlineでcinは – DZD

+0

@DZD、それは間違いなく – StoryTeller

+0

私は使用している\t getline(cin、filename); とfprintf(outfpt、 "%s"、s.c_str());それは動作していません – DZD

0

を試してみてください。あなたがscanfを使用している場合しかし、その後std::string

std::string filename(100, ' '); 
If (1 == scan("℅*s", &filename[0], filename.size())) 
    { //..... 
    } 

scanfから結果を格納する方法がある。しかし、ここでバッファオーバーフローが発生する可能性があります。オーバーフローが発生しないように、文字列のサイズを事前に知っている場合にのみ使用してください。

関連する問題