我是C的新手。我是C中的一个文件。但是当我试图在代码下运行时,我得到的内存错误不够。我无法理解这个问题。我清除了我的临时文件夹,但仍然存在错误。请帮忙。
File *logfile;
logfile = fopen ("sample.txt","a+");
printf("\n logfile=%d\n",logfile);
if (!logfile)
{
perror("Error");
exit(EXIT_FAILURE);
}
答案 0 :(得分:5)
您应该始终要求编译器为您提供所有警告。使用gcc
表示将-Wall -Wextra
选项传递给gcc
编译器。
如果你这样做,你的编译器会发现很多错误(发出警告或错误消息):
#include <stdio.h>
指令FILE* logfile;
而不是File *logfile;
标识符中的案例很重要。printf
的来电是错误的,因为logfile
不是int
格式说明符所需的%d
。它是一个指针(指向抽象数据结构),因此如果您想要printf
它,请使用%p
。如果您对fopen
- FILE*
句柄的处理方式不太了解,那么fopen
NULL
的结果只有gdb
才对您有用。或不)。一般建议是改进源代码,直到您不再收到编译器的警告。
您还应学习使用调试器(如gcc -Wall -Wextra -g yoursource.c -o yourprog
)。然后用调试信息编译,例如gcc
如果您使用的是Linux系统(gdb
和valgrind
是非常常用的工具),那么strace
,ltrace
和{{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;
}