PDA

View Full Version : int 2 char



behnam_akb
چهارشنبه 14 دی 1384, 19:57 عصر
در C++ چه طور میشه int رو به رشته تغییر داد

C++Lover
پنج شنبه 15 دی 1384, 05:52 صبح
می توانید از itoa که از توابع crt هست استفاده کنید که این تابع یک integer رو به یک رشته asciiz تبدیل می کنه البته اگر در VC برنامه می نویسید بهتره که از itoa_s استفاده کنید که از امنیت بیشتری برخورداره و امکان buffer overflow رو به وسیله دریافت یک آرگومان به عنوان حداکثر فضای موجود برای ذخیره رشته، از بین می بره.

sh_roohani
پنج شنبه 15 دی 1384, 09:21 صبح
همه اینایی که جناب C++Lover فرمودن، باضافه اینکه اگه از Wide Character استفاده می کنین، به جای itoa از itow_ استفاده کنین.

seyedof
پنج شنبه 15 دی 1384, 11:29 صبح
سلام
نمیدونم توی VC itoa حداکثر تا چه عددی رو میگیره. ولیکن برای اعداد long یعنی ۳۲ بیتی از ltoa استفاده کنید بهتره.
ممنون علی

sh_roohani
پنج شنبه 15 دی 1384, 11:33 صبح
توی VC++ 6.0 من بدون مشکل با اعداد 32 بیتی باهاش کار می کنم.

seyedof
جمعه 16 دی 1384, 12:07 عصر
سلام
بله ولی نوع int توی بعضی محیطها ۱۶ بیتی تعریف شده (مثلا بورلند سی تحت داس) ولی long همیشه ۳۲ بیتی است.
ممنون علی

karzari
جمعه 16 دی 1384, 14:28 عصر
سلام
من در BCB به راحتی با دستور IntToStr کار میکنم .

seyedof
یک شنبه 25 دی 1384, 08:58 صبح
می توانید از itoa که از توابع crt هست استفاده کنید که این تابع یک integer رو به یک رشته asciiz تبدیل می کنه البته اگر در VC برنامه می نویسید بهتره که از itoa_s استفاده کنید که از امنیت بیشتری برخورداره و امکان buffer overflow رو به وسیله دریافت یک آرگومان به عنوان حداکثر فضای موجود برای ذخیره رشته، از بین می بره.

سلام
دلیل اینکه این تاپیک رو بالا میارم اینه که بگم موندم استفاده از توابع رشته ای که آخرشون _s داره مثل موردی که شما فرمودید رو توصیه بکنیم یا نکنیم! از یک طرف به همون دلیل که گفتید خوبه که استفاده بشه ولی از نظر دیگه که فکر کنم مهمتره اینه که این توابع مختص Visual Studio 2005 هستند و در سایر کمپایلرهای سی تعریف نشده اند. حالا پلتفرمهای دیگه رو بیخیال ولی فکر کنم برنامه یا کلاسهایی که مینویسیم حداقل بین کامپایلرهای مختلف تحت ویندوز قابل استفاده باشه بهتره.
این رو چند روز پیش متوجه شدم. برنامه ای که نوشته بودیم روی بیلدر و Visual Studio 2003 و VS 6.0 به خوبی کمپایل میشد و بدون هیچ خطا و Warning هم بود. اما وقتی برای آزمایش VS 2005 رو نصب کردم جدای از کندی فوق العاده محیطش، دیدم کلی warning گرفته !! وقتی لیست خطاها رو نگاه کردم دیدم همشون مال گیر دادن به توابع رشته و اینجور چیزا است و توصیه کرده که از معادل کنترل شده اوونها یعنی همون _s دارها استفاده کنم و من هم مسلما اینکار رو نخواهم کرد ! چون با اینکار برنامه و کلاسهام Microsoft Specific میشه و اوونهم از نوع بسیار بدش که حتی Visual Studio Version Specific هم هست :)
ممنون علی

sh_roohani
یک شنبه 25 دی 1384, 12:23 عصر
سلام،
البته می بخشین، من متخصص امنیت نیستم، ولی سوالی که اینجا پیش میاد اینه که وقتی یه برنامه نویس C قدیمی یه کتابخونه رو با توابع استاندارد می نوشت و مثلا از strcpy یا wcscpy استفاده می کرد، امنیتش کمتر از برنامه نویسی بود که امروزه از توابع عجیب و غریب استفاده می کنه؟ فکر می کنم جواب این سوال نسبی باشه و برگرده به این مسئله که زبان C فرض می کنه شما به عنوان یه برنامه نویس می دونین دارین چیکار می کنین. قدرت بیشتر، مسئولیت بیشتر!
بنابراین به نظر من کاری مثل مدیریت حافظه حتی تو پروژه های بزرگ هم اون کابوس وحشتناکی نیست که شرکتهایی مثل مایکروسافت برای حا انداختن پلت فرم های جدیدشون سعی می کنن تبلیغ کنن. درسته که یه اشتباه می تونه باعث دردسر زیادی تو پروژه های بزرگ بشه، اما در عوض اگه از توابع خاص استفاده کنین (با استناد به فرمایش جناب seyedof) دیگه شما فقط یه برنامه نویس مثلا Visual Studio 2005 هستین، نه یه برنامه نویس C.
البته من اصلا تا حالا حتی محیط Visual Studio 2005 رو ندیدم و اگه به خاطر سیاستهای تجاری شرکتی که باهاش کار می کنیم نبود، از 98 به 2003 هم نمی رفتم. اما خوشبختانه هنوز مایکروسافت پشتیبانی C رو از محیط های توسعه نرم افزارش حذف نکرده. شخصا ترجیح می دم تا جایی که کدی که می نویسم خاص ویندوز نیست، مثلا از wstring و vector استفاده کنم، نه از CString و CArray. یا به جای CFile از ifstream و ofstream استفاده کنم.

C++Lover
جمعه 30 دی 1384, 03:44 صبح
جناب seyedof و sh_roohani عزیز با نظرات شما کاملا موافقم. باور کنید من هم تا به حال از این توابع secure استفاده نکرده ام و خدائیش هیچ مشکلی هم با توابع استاندارد ندارم و از آنها استفاده می کنم. در ضمن همیشه حساسیت زیادی نسبت به قابل انتقال بودن کدی که مینویسم دارم و این را هم به همه توصیه میکنم. در مورد اون جوابی هم که دادم فقط سعی کردم جمله های MSDN رو بنویسم!!!!!