نمایش نتایج 1 تا 4 از 4

نام تاپیک: تبدیل CString به char*

  1. #1

    تبدیل CString به char*

    سلام
    میخواستم بدونم چطور میشه یه CString رو به char * تبدیل کرد؟

    من چند ساعت تو اینترنت گشتم (سایت های ایرانی و خارجی) ولی هر چی که امتحان کردم، جواب نداد. (یه سری میگفتن برای Unicode نمیشه و ....)

    برای استفاده در برنامه mfc در Visual C++‎ 2010 میخوام. دلیلش هم اینه که یه Edit Control دارم که CString برمیگردونه. حالا از یه کتابخونه استفاده میکنم که تابعش mu::string_type میگیره. (mu اسم namespace اش هست) مثلا زدم:

    _T("abcd")

    مشکلی نداشت. حالا میخوام CString رو به char تبدیل کنم و پشتش T_() بزارم...

    ممنون میشم کمکم کنید.

  2. #2

    نقل قول: تبدیل CString به char*

    سلام.
    اگر هدفتون تبدیل یک CString (از نوع Wide Char) به CHAR (یک بایتی) هستید، می تونید بدین شکل عمل کنید:

    CString s(_T("WHATEVER"));
    LPTSTR pWide = s.GetBuffer();

    USES_CONVERSION;
    CHAR *pChar = W2A(pWide);

    s.ReleaseBuffer();


    در واقع در کد فوق، با استفاده از ماکروی W2A من WCHAR * رو به CHAR * تبدیل کردم...

    موفق باشید.

  3. #3
    ممنون دوستان، درست شد

    میگم شاید کسی بدردش بخوره:

    CString str = ....
    str.GetBuffer(0);
    آخرین ویرایش به وسیله mehdi.mousavi : شنبه 06 فروردین 1390 در 17:35 عصر دلیل: ادغام دو پست متوالی

  4. #4

    نقل قول: تبدیل CString به char*

    نقل قول نوشته شده توسط sepehr1014 مشاهده تاپیک
    میگم شاید کسی بدردش بخوره:

    CString str = ....
    str.GetBuffer(0);

    سلام.
    اگر هدفتون فقط گرفتن Pointer درونی CString هستش (به شرطیکه هیچ تغییری در string بوجود نیارید) می تونید بدین شکل نیز عمل کنید:

    TCHAR *p1 = (TCHAR *)((LPCTSTR)s);


    که Performance اش بالاتر هم هست.

    اما کدی که شما نوشتید، باعث میشه تا Execution Path طولانی تری طی بشه و نتیجه یکسانی بدست بیاد! وقتی میگید GetBuffer(0)
    GetBuffer ابتدا طول حافظه تخصیص یافته فعلی رو بررسی میکنه، اگر طول درخواستی شما بیش از میزان مزبور باشه، اضافه حافظه مورد نیاز
    Reallocate میشه و Pointer به اون حافظه به شما برمیگرده. حالا وقتی شما این متود رو با پارامتر صفر Call می کنید، در واقع عمل Reallocate
    انجام نمیشه، اما روند مزبور طی میشه. در صورتیکه وقتی GetBuffer رو بدون پارامتر صدا کنید، همون اتفاق رخ میده، اما دیگه متود PrepareWrite
    فراخوانی نمیشه.

    در هر حال، اگر GetBuffer رو با پارامتر صفر Call کردید، حواستون باشه که تابعی که گفتید پارامتری از نوع mu::string_type میگیره، خارج از
    حافظه Allocate شده برای اون Pointer ننویسه...

    موفق باشید.

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •