首页 > 代码库 > <问题记录>关于文件指针

<问题记录>关于文件指针

在文件指针中遇到这样的问题,定义一个文件指针,使用它打开一个文件读取内容之后关闭,随后再次用这个文件指针打开这个文件在程序运行时则出现问题。但是如果再定义新的文件指针,不管是否使用新定义的指针,程序就可以顺利进行。具体实例如下:

#include <stdio.h>
#include "stdlib.h"
#pragma warning (disable:4996)
void divide_line()
{
    printf("\n------------------------------------\n");
}
void main()
{
    FILE* pf;                                  //在这里多定义一个文件指针,即把这一句修改为:FILE* pf,*pff;
    char ch[60];
    char c;
    if ((pf = fopen("file1.txt","r")) == NULL) printf("can not open this file!");
    fgets(ch, 6, pf);
    fclose(pf);
    divide_line();
    printf("\tfget读取的内容为:\n%s", ch);
    divide_line();
    if ((pf = fopen("file1.txt", "r")) == NULL) printf("can not open this file!");
    fscanf(pf, "%s", ch);
    fclose(pf);
    divide_line();
    printf("\tfscanf读取的内容为:\n%s", ch);
    divide_line();
    getchar();
}

从上边的代码中可以看出定义的字符数组"ch”长度为60,在文件”file1.txt”里边运存的数据为:1234567890(总共7遍),也就是说预存数据的长度是超出这个数组长度的。下边来看运行结果。

技术分享

从结果可以看到fget()函数部分的内容执行正确,在之后的fprintf()函数部分无法正确执行,并出现如下提示:

技术分享

到这里大概猜测是因为数组长度不够造成的,但是一个比较奇怪的问题出现,如果在文件指针出多定义一个文件指针,这个问题就奇迹般的没有了,即使不使用新定义的文件指针,只是多定义了一个文件指针,整个程序就按”预期“的执行。下边是执行结果:

技术分享

造成这个问题的原因不清楚,在接下来的学习中希望能解决。

<问题记录>关于文件指针