PDA

View Full Version : استفاده از تابع gcount



mng.n.2008
یک شنبه 09 بهمن 1390, 15:12 عصر
سلام به تمام دوستان
من در مبحث فایل ها می خواستم از تابع GCOUNT برای فهمیدن اینکه چند بایت از فایل خوانده شده استفاده کنم. اما با یک نتیجه عجیب روبرو شدم. و اونم این بود که مقدار متغیر CHAR رو زمانی که با یک INT یا هر نوع داده ای دیگر می گیریم یک مقدار غیر از ۱ نشون می ده.

برنامه ای که نوشته بودم تا تعداد بایت READ شده در فایل را نشان دهد به شکل زیر است:

#include <iostream>
#include <fstream>

using namespace std;

struct mystructure{
int myvar;
char urchar;
float my2var;
};

int main()
{
struct mystructure stcobj;
ofstream myobj("filename", ios::out | ios::binary);
myobj.write((char *) &stcobj, sizeof(struct mystructure));
myobj.close();

ifstream myreadobj("filename", ios::in | ios::binary);
myreadobj.read((char *) &stcobj, sizeof(struct mystructure));
cout << myreadobj.gcount() << endl;
myobj.close();
return 0;
}


توضیح برنامه:‌
یک ساختار تعریف کرده ام و در اون سه متغیر با انواع داده ای متفاوت قرار داده ام.
سپس یک فایل باینری را ساخته ام.
با استفاده از تابع write ساختار خودم رو در فایل نوشته ام.
سپس فایل باینری را با تابع READ ساختار خودم رو از فایل خونده ام و برای اینکه ببینم چند بایت از فایل خوانده شده است از تابع gcount استفاده کرده ام.

در حال حاضر طبق انتظار نتیجه برنامه که در خروجی چاپ می شود باید ۴+۱+۴ = ۹ باشد اما ۱۲ است.

از دوستان صاحب نظر و کسانی که می توانند کمک کنند ممنون می شم اگر دلیل قانع کننده ای ارایه کنند.

طبق نتایجی که از تغییر ترکیب انواع داده ای انجام دادم به نظر می رسد که سیستم نوع داده ای کاراکتر را نمی تواند با سایر انواع داده ای بگیرد. در حقیقت هر کاراکتر را ۴ بایت می گیرد.
به عبارتی هر ۱ یا هر ۲ یا هر ۳ یا هر ۴ کاراکتر را ۴ بایت می گیرد.
هر ۵ کاراکتر می شود ۲ تا چهار بایت...