0

私はCに非常に慣れていません。Cでファイルを作成しています。しかし、コードの下で実行しようとすると、メモリ不足エラーが発生します。私は問題を理解できません。一時フォルダーをクリアしましたが、まだエラーが存在します。助けてください。

File *logfile;
logfile = fopen ("sample.txt","a+");
printf("\n logfile=%d\n",logfile);
if (!logfile)
 {
  perror("Error");
  exit(EXIT_FAILURE);
 }
4

3 に答える 3

5

可能な限りすべての警告を提供するよう、常にコンパイラに依頼する必要があります。これは、オプションをコンパイラにgcc渡すことを意味します。-Wall -Wextragcc

これを行った場合、コンパイラは (警告またはエラー メッセージを発行することによって) 多くの間違いを検出したことになります。

  1. #include <stdio.h>ディレクティブがありません
  2. 識別子のケースは重要ではFILE* logfile;ないと宣言する必要があります。File *logfile;
  3. フォーマット指定子が望むように ではないため、への呼び出しprintfは間違っています。これは (抽象データ構造への) ポインターであるため、必要な場合は を使用します。-edハンドルについては、そのアドレスからはあまりわからないことに注意してください(重要なのは、結果がis であるかどうかだけです)。logfileint%dprintf%pfopenFILE*fopenNULL

一般的なアドバイスは、コンパイラから警告が出なくなるまでソース コードを改善することです。

デバッガー ( などgdb) の使用方法も学習する必要があります。次に、デバッグ情報を使用してコンパイルします。gcc -Wall -Wextra -g yoursource.c -o yourprog

Linux システム (gccおよびgdbが非常に一般的なツール) を使用している場合はvalgrindstraceおよび ltraceユーティリティが役立つことがよくあります。

于 2012-07-25T08:12:32.427 に答える
1

logfileタイプである必要がありますFILE *- 変更:

File *logfile;

に:

FILE *logfile;

また、次のように変更します。

printf("\n logfile=%d\n",logfile);

に:

printf("\n logfile=%p\n",logfile);
于 2012-07-25T08:08:28.557 に答える
0

私はあなたが実際にファイルの内容を出力したかったと仮定していますが、もしあなたが本当にポインタを見たいのなら、Paul R の投稿はおそらくあなたが求めているものです. そうは言っても、C でこれを行ってからしばらく経ちましたが、次のようなものが必要になると思います。

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

#define BUFFER 1000

int main(void)
{
  FILE *logfile = fopen("sample.txt", "r");
  char buffer[BUFFER];

  if (!logfile)
  {
    printf("Error\n");
    exit(EXIT_FAILURE);
  }

  while (fgets(buffer, BUFFER, logfile) != NULL)
  {
    printf("%s", buffer);
  }

  printf("\n");
  fclose(logfile);

  return 0;
}
于 2012-07-25T09:33:27.917 に答える