Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Typcasting string & LPSTR :: MFC

kuphrynkuphryn Posts: 266Member
Hi.

I would like to know a way to correctly cast a string object to LPSTR.

I have an LVITEM structure for a CListCtrl.

-----
string szText = "testing 1 2 3";
LVITEM item;
...

// Compiler does not allow this kind of typecasting.
// Note "testing 1 2 3" alone is not an option. I can
// use a string and/or CString object or allocated
// new memory and then copy the data from szText.c_str()?

item.pszText = szText;
-----

How do you get the line above to work? I have tried using a CString object, but the compiler kept responding with an error about LPSTR.

I saw members recommending CString.GetBuffer() and double casting (LPSTR)(LPCTSTR)(CString). Is there any advantage to using GetBuffer() and/or casting?

Thanks,
Kuphryn

Comments

  • AsmGuru62AsmGuru62 Posts: 6,519Member
    : Hi.
    :
    : I would like to know a way to correctly cast a string object to LPSTR.
    :
    : I have an LVITEM structure for a CListCtrl.
    :
    : -----
    : string szText = "testing 1 2 3";
    : LVITEM item;
    : ...
    :
    : // Compiler does not allow this kind of typecasting.
    : // Note "testing 1 2 3" alone is not an option. I can
    : // use a string and/or CString object or allocated
    : // new memory and then copy the data from szText.c_str()?
    :
    : item.pszText = szText;
    : -----
    :
    : How do you get the line above to work? I have tried using a CString object, but the compiler kept responding with an error about LPSTR.
    :
    : I saw members recommending CString.GetBuffer() and double casting (LPSTR)(LPCTSTR)(CString). Is there any advantage to using GetBuffer() and/or casting?
    :
    : Thanks,
    : Kuphryn
    :
    [blue]'CString::GetBuffer()' is only if you want to modify a CString object. In the case of LVITEM - member 'pszText' is LPTSTR because it can be used to GET/SET the text, so it cannot be constant. The CString on the other hand has a typecast operator, but it requires the const modifier (LP[red]C[/red]TSTR). The point is - you need a double cast here, just as you saw someone doing:[/blue][code]
    CString s ("sample 1 2 3...");

    item.pszText = (LPTSTR) (LPCTSTR) s;
    [/code]
  • kuphrynkuphryn Posts: 266Member
    Okay. Thanks.

    Kuphryn
Sign In or Register to comment.