ページ 11

fopen関数について

Posted: 2015年1月03日(土) 15:51
by わこう
fopen関数についてふと疑問に思ったことがあり、質問させてください。

コード:

if ( ( fp = fopen ( fname, "w+b" ) ) == NULL ) {			
    printf ( "\n エラー" );			
    return -1;			
}	


これ、fopen関数の鉄板ともいうべき使い方だと思うのですが、いろいろなサイトを調べて
回って、第二引数が "r" の時ファイルが見つからなければNULLを、"w"、 "a" なら新規作成する
というところまでわかりました
ということは、第二引数が "w"、 "a" のときはNULL が返されることはないのじゃないか?
と、ふと考えてみたのですが、この辺はどこも詳しく解説してくれるサイトがみつからなかったため、
どなたか教えていただけませんか?

Re: fopen関数について

Posted: 2015年1月03日(土) 15:57
by みけCAT
自分の環境では、書き込み禁止(読み取り専用)のファイルに"w"でアクセスしようとすると、NULLが返りました。

Windows Vista Home Premium SP2 32ビット
Intel(R) Core(TM)2Duo T8100 @2.10GHz 2.10GHz
RAM 4.00GB
GCC(MinGW) 4.8.1

Re: fopen関数について

Posted: 2015年1月04日(日) 03:58
by かずま
わこう さんが書きました: ということは、第二引数が "w"、 "a" のときはNULL が返されることはないのじゃないか?
fopen はディレクトリを作れないので、fname = "dir/file" の場合、
"dir" という名前のディレクトリが存在しなければエラーになり、NULL を返します。
fname = "dir/" や fname = "." の場合も、NULL を返します。
ハードディスク(USBメモリでもよい)に空きがない場合も NULL を返します。

Re: fopen関数について

Posted: 2015年1月04日(日) 13:46
by わこう
あ~そういうことですか!!
わかりました!みけCATさん、かずまさんありがとうございました!