2016-10-14 4 views
0

システムコマンドを使わずにファイルを作成しようとしています。私が書いたこのコードは複数の問題を抱えています。最初にfptrを作成し、それがNULLかどうかをチェックすると、double freeまたは破損が発生します。以前の方法でも、ファイルを複数回閉じることはできませんでしたが、私は見ることのできない行間に非常に単純な隠れがあると思います。ファイルを開くことなくファイルを作成するにはどうすればいいですか?

int main() 
{ 
    char* filename; 
    char x; 
    cout << "enter filename.**: "; 
    cin >> filename; 
    struct stat buffer; 
    if (! stat (filename, &buffer)) 
    { 
     cout << ("It exists\n"); 
    } 
    else 
    { 
     FILE* fptr;  
     fptr = fopen (filename,"w");; 
     fclose (fptr); 
    } 
} 

本当にありがとうございます! :)

+3

'filename'にスペースを割り当てるのを忘れました。 (これはC++であるため、 'std :: string'を使用してください) – molbdnilo

+2

新しいコンパイラを使用している場合は、[filesystem TS](http://en.cppreference.com/w/cpp/filesystem)を使用できます。 C++ 17標準の一部になります。 – NathanOliver

+0

ファイル名のスペースをどのように割り当てる必要がありますか? – malloc

答えて

2

いくつかのシステム(Linuxなど、一部のシステムではmknod()を使用できますが、これはすべてのオペレーティングシステムには移植できないことに注意してください)。

if (mknod(filename, S_IFREG|0666, 0) != 0) { 
    throw std::system_error(errno, std::system_category()); 
} 

ポータブルコードでは、ファイルを開くためにファイルを開く必要があります。

関連する問題