1

私はCプログラミングの初心者ですが、コツをつかんでいます。私は FILE 関数に取り組んでいますが、関数が NULL を返すことはありません。これは、ファイルが存在せず、「r」として初期化されている場合でも発生します。コードは以前は機能していましたが、その後は TRUE を返し続けています。コードを複数の方法で記述しましたが、すべてそこにあるファイルとして返されます。ファイル名を変更して完全に異なるファイルを作成しましたが、それでも同じ結果が得られます。どんな助けでも素晴らしいでしょう。前もって感謝します。

編集:みんなありがとう。私はそれを機能させました。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;

    fp = fopen("c:\\lest.txt", "w");
    if(fp == NULL)
        {
        printf("File Not Available\n");
        exit(0);
        }

    fclose(fp);

    return 0;
}
4

4 に答える 4

4
 fp = fopen("c:\\lest.txt", "r");
 if(fopen == NULL)

これらの行は非常に間違っています。fopen()は標準機能です。したがって、fopen(括弧なし)はの関数ポインタを表すため、常に非 NULLfopen()になります。

すべきことは、 の戻り値を確認することですfopen()。この場合はどれですかfp

if(fp==NULL){
    perror("fopen");
    exit(1);
}

また、

  1. 正確なエラーを出力するには、perror()関数を使用する必要があります。
  2. exit(0)OS に 0 を返します。これは成功を示します。より良い使用exit(1)
于 2012-11-29T04:38:22.140 に答える
4

fopenではなく、nullに対してfpをチェックする必要があります。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;

    fp = fopen("c:\\lest.txt", "r");
    if(fp == NULL)
        {
        printf("File Not Available\n");
        exit(0);
        }

    fclose(fp);

    return 0;
}
于 2012-11-29T04:36:16.217 に答える
3

fopennull をテストfpする代わりに、代わりにテストするように条件を変更しますNULL

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE fp*;

    fp = fopen("c:\\lest.txt", "r");
    if(fp == NULL)
    {
        printf("File Not Available\n");
        exit(0);
    }

    fclose(fp);

    return 0;
}
于 2012-11-29T04:37:57.077 に答える
0

あなたが言っているように、ファイル名を変更してfp = fopen("c:\lest.txt", "w");を呼び出しても lest.txtという名前の既存のファイルがなくても、 fp!=NULLを取得します。

指定されたファイルが存在しない場合、 fopen() 関数で指定された名前の新しいファイルが作成され、そのファイルポインタが返されるため、回答が得られたと思います。

詳細については、関数 fopen() http://linux.die.net/man/3/fopenの man ページを参照してください。

于 2012-11-29T05:07:17.303 に答える