C中没有足够的内存错误

时间:2012-07-25 08:05:15

标签: c memory file-io

我是C的新手。我是C中的一个文件。但是当我试图在代码下运行时,我得到的内存错误不够。我无法理解这个问题。我清除了我的临时文件夹,但仍然存在错误。请帮忙。

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

3 个答案:

答案 0 :(得分:5)

您应该始终要求编译器为您提供所有警告。使用gcc表示将-Wall -Wextra选项传递给gcc编译器。

如果你这样做,你的编译器会发现很多错误(发出警告或错误消息):

  1. 您错过了#include <stdio.h>指令
  2. 您应该声明FILE* logfile;而不是File *logfile;标识符中的案例很重要。
  3. 您对printf的来电是错误的,因为logfile不是int格式说明符所需的%d。它是一个指针(指向抽象数据结构),因此如果您想要printf它,请使用%p。如果您对fopen - FILE*句柄的处理方式不太了解,那么fopen NULL的结果只有gdb才对您有用。或不)。
  4. 一般建议是改进源代码,直到您不再收到编译器的警告。

    您还应学习使用调试器(如gcc -Wall -Wextra -g yoursource.c -o yourprog)。然后用调试信息编译,例如gcc

    如果您使用的是Linux系统(gdbvalgrind是非常常用的工具),那么straceltrace和{{1}}实用程序就是经常有用。

答案 1 :(得分:1)

logfile应为FILE *类型 - 更改:

File *logfile;

为:

FILE *logfile;

也改变了:

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

为:

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

答案 2 :(得分: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;
}