我对 C 很陌生。我在 C 中创建了一个文件。但是当我尝试在代码下面运行时,我收到内存不足错误。我无法理解这个问题。我清除了我的临时文件夹,但仍然存在错误。请提供任何帮助。
File *logfile;
logfile = fopen ("sample.txt","a+");
printf("\n logfile=%d\n",logfile);
if (!logfile)
{
perror("Error");
exit(EXIT_FAILURE);
}
您应该始终要求您的编译器向您提供所有可能的警告。这gcc
意味着将-Wall -Wextra
选项传递给gcc
编译器。
如果你这样做了,你的编译器会发现很多错误(通过发出警告或错误消息):
#include <stdio.h>
指令FILE* logfile;
notFile *logfile;
标识符中的案例很重要。printf
是错误的,因为不是logfile
格式说明符想要的。它是一个指针(指向一个抽象数据结构),所以如果你想要它,请使用. 请注意,您不会从其地址中对-ed句柄了解太多(对您而言唯一重要的是结果是否为is )。int
%d
printf
%p
fopen
FILE*
fopen
NULL
一般建议是改进您的源代码,直到您不再收到来自编译器的警告。
您还应该学习使用调试器(如gdb
)。然后使用调试信息进行编译,例如gcc -Wall -Wextra -g yoursource.c -o yourprog
如果您使用的是 Linux 系统(在该系统上gcc
和gdb
是非常常用的工具),valgrind
和strace
实用 ltrace
程序通常很有用。
logfile
应该是类型FILE *
- 更改:
File *logfile;
至:
FILE *logfile;
并改变:
printf("\n logfile=%d\n",logfile);
至:
printf("\n logfile=%p\n",logfile);
我假设您实际上想要输出文件的内容,但如果您真的想查看指针,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;
}