0

121_5.c 的代码(121_5.c 是程序名)

#include<stdio.h>

typedef struct student
{
    char name[40];
    int age;
}STUDENT;   // size is 44 bytes

int main()
{
    int i;
    char ch;
    STUDENT s[12]={
                     {"ruturaj",0},{"kailsh",1},{"vedant",2},{"sakshi",3},
                     {"aaditya",10},{"tejas",11},{"santosh",12},{"pankaj",13},
                     {"samruddhi",20},{"kristen",21},{"emma",22},{"brad",23}
                                                        
                 },s1;
                 
    FILE *fp;
    fp=fopen("121_para_5.dat","w");   // 121_para_5 is file name
    printf("fp-> %d\n",ftell(fp));

    for(i=0;i<=11;i++)
    {
        fwrite(&s[i],sizeof(STUDENT),1,fp);
        printf("i=%-2d  fp-> %d\n",i,ftell(fp)); // -2d is just for alligen
    }
    fclose(fp);

    fp=fopen("121_para_5.dat","r");

    fseek(fp,220,SEEK_SET);  // at this position null block created in memory
    printf("fseek -> %d\n",ftell(fp)); 

    ch=fgetc(fp);  // retriving character at 220th position
    printf("%d",ch);

    fclose(fp);
}

输出

输出

以文本格式输出

fp-> 0
i=0   fp-> 44
i=1   fp-> 88
i=2   fp-> 132
i=3   fp-> 176
i=4   fp-> 221
i=5   fp-> 265
i=6   fp-> 309
i=7   fp-> 353
i=8   fp-> 397
i=9   fp-> 441
i=10  fp-> 485
i=11  fp-> 529
fseek -> 220
0
--------------------------------
Process exited after 0.6639 seconds with return value 0
Press any key to continue . . .

现在看到在 .dat 文件中写入数据时,我正在检查文件指针指向的位置。所以文件指针最初指向位置0并且位置每次增加44,因为学生数据类型的大小是44

但数据从176-219(44字节)进入后第220位被空填充,则数据从第221位开始正常写入。所以我的问题是为什么突然空字符排在第 220 位。

现在我增加输入数据并运行循环更多次以检查我在哪里可以再次获得 null 所以我在 1101,1454,1983,2336,1689,3042 得到它......

当数据进一步增加时输出

当输入进一步增加时输出

以文本模式输出

fp-> 0
i=0   fp-> 44
i=1   fp-> 88
i=2   fp-> 132
i=3   fp-> 176
i=4   fp-> 221
i=5   fp-> 265
i=6   fp-> 309
i=7   fp-> 353
i=8   fp-> 397
i=9   fp-> 441
i=10  fp-> 485
i=11  fp-> 529
i=12  fp-> 573
i=13  fp-> 617
i=14  fp-> 661
i=15  fp-> 705
i=16  fp-> 749
i=17  fp-> 793
i=18  fp-> 837
i=19  fp-> 881
i=20  fp-> 925
i=21  fp-> 969
i=22  fp-> 1013
i=23  fp-> 1057
i=24  fp-> 1102
i=25  fp-> 1146
i=26  fp-> 1190
i=27  fp-> 1234
i=28  fp-> 1278
i=29  fp-> 1322
i=30  fp-> 1366
i=31  fp-> 1410
i=32  fp-> 1455
i=33  fp-> 1499
i=34  fp-> 1543
i=35  fp-> 1587
i=36  fp-> 1631
i=37  fp-> 1675
i=38  fp-> 1719
i=39  fp-> 1763
i=40  fp-> 1807
i=41  fp-> 1851
i=42  fp-> 1895 
4

0 回答 0