海淀csy 发表于 2019-4-5 15:18:03

c语言 文件读取调用fgets函数后指针地址不变?

本帖最后由 海淀csy 于 2019-4-5 18:42 编辑

/*
代码如下,读取文件,调用fgets函数后打印文件指针的地址,指针值没有变化
那么指针未移动又是怎么读取文件中不同数据的呢?
*/

#include<stdio.h>
#define MAX 1024
int main()
{
        FILE *fp;                       //定义文件指针
        char *s;
        char buffer;
        fp=fopen("a.txt","w");      //创建文本
        fputs("bbb\n",fp);             
        fputs("ccc",fp);                //输入文本内容
        fclose(fp);
               
        fp=fopen("a.txt","r");
        fgets(buffer,MAX,fp);
        printf("指针p=%p\n",fp);
        printf("%s",buffer);
        fgets(buffer,MAX,fp);
        printf("指针p=%p\n",fp);
        printf("%s",buffer);
}

910201513 发表于 2019-4-5 18:31:02

fgets函数的功能是:从fp所指向的文件中读取长度不超过n-1个字符的字符串,并将该字符串放到字符数组s中。如果操作正确,函数的返回值为字符数组s的首地址;如果文件结束或出错,则函数的返回值为NULL。

海淀csy 发表于 2019-4-5 18:34:32

910201513 发表于 2019-4-5 18:31
fgets函数的功能是:从fp所指向的文件中读取长度不超过n-1个字符的字符串,并将该字符串放到字符数组s中。 ...

那指针指向的地址都没有改变 为什么会读出下一个字符串的内容呢

910201513 发表于 2019-4-5 20:53:01

函数原型
char *fgets(char *s, int n,FILE *stream)
   {
   register int c;
   register char *cs;
   cs=s;
   while(--n>0 &&(c = getc(stream))!=EOF)
   if ((*cs++=c) =='\n')
         break;
   *cs ='\0';
   return (c == EOF && cs == s) ?NULL :s ;
    }

海淀csy 发表于 2019-4-7 16:59:28

910201513 发表于 2019-4-5 20:53
函数原型

我尝试了使用fgetc函数,结果指针地址还是没有改变,请问这又是为什么!

Croper 发表于 2019-4-7 19:59:21

因为文件指针不是一个指针,

FILE是一个数据结构,储存了你打开的文件的一些信息,FILE* fp是指向这个数据结构的指针,和当前读写位置没有直接的联系
页: [1]
查看完整版本: c语言 文件读取调用fgets函数后指针地址不变?