View Full Version : نوع size_t
HAIdle
شنبه 06 مرداد 1386, 22:20 عصر
سلام دوستان
دستور strlen که طول یک رشته را بر می گردانه مقدار برگشتی آن از نوع size_t است. کسی می دونه این نوع چیه و چرا int معمولی بر نمی گردونه
و چرا اگه ما آن را در int بریزیم هشدار می ده که ممکنه اطلاعات از دست بدی؟
emad_67
شنبه 06 مرداد 1386, 22:25 عصر
size_t مثل int هست فقط اعداد منفی رو در بر نمیگیره یعنی از نوع unsigned int هست و کامپایلر هم اخطاری نمیده من چک کردم در واقع strlen چون مقدار منفی بر نمیگردونه این نوع رو برا اون در نظر گرفتن
HAIdle
یک شنبه 07 مرداد 1386, 13:10 عصر
من با محیطvisual studio 2005 کد می نویسم و اخطار می ده. ولی اگر این نوع عدد صحیح مثبت باشه این اخطار غیرمعقوله چون ما داریم یه عدد صحیح مثبت را در یک عدد صحیح معمولی می ریزیم. چطور ممکنه اطلاعات از دست بره؟ (البته یه حالت داره و اون این که اگر int , size_t هر دو مثلا 32 بیتی باشد size_t اعداد بزرگتری را در بر می گیره و بنابراین ممکنه ریختن آن در عدد صحیح معمولی اطلاعات را از بین ببره. آیا منظور همینه؟)
someCoder
یک شنبه 07 مرداد 1386, 13:24 عصر
من با محیطvisual studio 2005 کد می نویسم و اخطار می ده. ولی اگر این نوع عدد صحیح مثبت باشه این اخطار غیرمعقوله چون ما داریم یه عدد صحیح مثبت را در یک عدد صحیح معمولی می ریزیم. چطور ممکنه اطلاعات از دست بره؟ (البته یه حالت داره و اون این که اگر int , size_t هر دو مثلا 32 بیتی باشد size_t اعداد بزرگتری را در بر می گیره و بنابراین ممکنه ریختن آن در عدد صحیح معمولی اطلاعات را از بین ببره. آیا منظور همینه؟)
برای جلوگیری از اشتباهات، کامپایلر برای تبدیل ضمنی، بهت اخطار میده. در مورد size_t به int که حق داره؛ ولی حتی در مورد size_t به unsigned int هم بهت اخطار میده که دیگه این دلیلت درست در نمیاد! اینجوری بنویس که مشکلت حل شه:
x = (int)strlen("...");
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.