ali ali10
جمعه 10 مهر 1394, 20:15 عصر
با سلام
من با استفاده از دستور زیر فایلی را خوانده و سپس مقدار اشاره گر را نیز می خوانم
long position=1000;
unsigned char ch[100];
fseek (stream,0,SEEK_SET);
int kk=fread(&ch,sizeof(ch),1,stream);
position=ftell(stream);
پس از اجرای دستور ftell و نمایش مقدار position انتظار می رود مقدار آن برابر با 100 باشد ولی با کمال تعجب مقدار آن برابر 3465 خواهد بود!!!!!!!!!!!
حال با ورود دستورات زیر:
long position1=1000,position2=1000;
unsigned char ch[100];
fseek (stream,0,SEEK_SET);
int kk=fread(&ch,sizeof(ch),1,stream);
position1=ftell(stream);
fseek (stream,0,SEEK_SET);
fread(&ch,sizeof(ch),1,stream);
position2=ftell(stream);
printf("%ld %ld\n",position1,position2);
با نمایش دو مقدار position1 , position2 مقدار position1 برابر همان 3465 بوده ولی position2برابر 100 خواهد شد جالب تر آنکه مقادیری که در هر دو حالت در ch قرار می گیرد مثل هم است.
چرا؟؟؟یعنی برای آنکه ftell مقدار صحیح را برگرداند باید تابع fread را یکبار اجرا کرده و سپس با fseek اشاره گر را صفر کرد و آنگاه دوباره فایل را از اول خواند تا تابع ftell مقدار صحیح را برگرداند؟؟؟
این که خیلی غیر منطقی به نظر می آید!!!!!!
من با استفاده از دستور زیر فایلی را خوانده و سپس مقدار اشاره گر را نیز می خوانم
long position=1000;
unsigned char ch[100];
fseek (stream,0,SEEK_SET);
int kk=fread(&ch,sizeof(ch),1,stream);
position=ftell(stream);
پس از اجرای دستور ftell و نمایش مقدار position انتظار می رود مقدار آن برابر با 100 باشد ولی با کمال تعجب مقدار آن برابر 3465 خواهد بود!!!!!!!!!!!
حال با ورود دستورات زیر:
long position1=1000,position2=1000;
unsigned char ch[100];
fseek (stream,0,SEEK_SET);
int kk=fread(&ch,sizeof(ch),1,stream);
position1=ftell(stream);
fseek (stream,0,SEEK_SET);
fread(&ch,sizeof(ch),1,stream);
position2=ftell(stream);
printf("%ld %ld\n",position1,position2);
با نمایش دو مقدار position1 , position2 مقدار position1 برابر همان 3465 بوده ولی position2برابر 100 خواهد شد جالب تر آنکه مقادیری که در هر دو حالت در ch قرار می گیرد مثل هم است.
چرا؟؟؟یعنی برای آنکه ftell مقدار صحیح را برگرداند باید تابع fread را یکبار اجرا کرده و سپس با fseek اشاره گر را صفر کرد و آنگاه دوباره فایل را از اول خواند تا تابع ftell مقدار صحیح را برگرداند؟؟؟
این که خیلی غیر منطقی به نظر می آید!!!!!!