【发布时间】:2015-04-01 09:06:43
【问题描述】:
我首先以二进制读取文件,当我读取文件末尾时,文件关闭,视觉stdio 2013错误指针越界。
FILE *fp;
fp = fopen("stu_manage.txt", "ab+");
fseek(fp,0L,SEEK_END);
long last = ftell(fp) / length;
long i = 0L;
rewind(fp);
struct student *node=(struct student*)malloc(sizeof(struct student));
for (; i < last; i++)
{
if (fread(&node[i], length, 1, fp) != 1)
{
printf("read conpletely");
break;
}
}
if (fp!=NULL)
fclose(fp);
当我把这里的指针改成全局变量后,这个错误就解决了,数组在某种程度上相当于这里的指针无法运行我感觉无法理解。
【问题讨论】:
-
标准警告:请do not cast
malloc()和C中的家人的返回值。 -
什么是
length?它是在哪里定义的? -
@SouravGhosh:总而言之,你不要在任何时候强制转换
malloc()的返回值,因为:在C中是不需要的;在 C++ 中它是必需的,但在 C++ 中你甚至不使用malloc();) -
@Zaibis 是的。对。 :-)