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 -Wextra选项传递给gcc编译器。

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

  1. 您缺少#include <stdio.h>指令
  2. 您应该声明FILE* logfile;notFile *logfile;标识符中的案例很重要。
  3. 您的调用printf是错误的,因为不是logfile格式说明符想要的。它是一个指针(指向一个抽象数据结构),所以如果你想要它,请使用. 请注意,您不会从其地址中对-ed句柄了解太多(对您而言唯一重要的是结果是否为is )。int%dprintf%pfopenFILE*fopenNULL

一般建议是改进您的源代码,直到您不再收到来自编译器的警告。

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

如果您使用的是 Linux 系统(在该系统上gccgdb是非常常用的工具),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 回答