How to Convert CString to _TCHAR *
-
Hi all.. I want to convert CString to _TCHAR* ////////////////////////////// _TCHAR *sEndDate; CString CurrDate; ///////////////////// I am trying this code.. sEndDate = (LPCSTR)CurrentDate; Its not working ... plz help me manju
Hi.. I am Mnaju.I have Completed my B.E Computers Science.Lokking for a job.I am interested in VC++ manju
-
Matthew Faithfull wrote:
it's not wrong but a GetBuffer() call would be better style
I don't agree. Implicit (or explicit) cast is not the same as
GetBuffer()
and you shouldn't use optionally one or the other:GetBuffer
returnsLPTSTR
, while the cast returnsLPCTSTR
: the addedC
have his significance. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain ClarkeCPallini wrote:
the added C have his significance.
Indeed it has and although I was talking general C++ style I do think it applies in this case. The CString impilcit cast returns LPCSTR because it isn't safe for it to hand out a pointer to its internal buffer without locking it but it also isn't good C++ for it to 'silently' give you a const pointer to something that is inherently not const. It's a compromise brought on by a compromised design.
"The secret of happiness is freedom, and the secret of freedom, courage." Thucydides (B.C. 460-400)
-
CPallini wrote:
the added C have his significance.
Indeed it has and although I was talking general C++ style I do think it applies in this case. The CString impilcit cast returns LPCSTR because it isn't safe for it to hand out a pointer to its internal buffer without locking it but it also isn't good C++ for it to 'silently' give you a const pointer to something that is inherently not const. It's a compromise brought on by a compromised design.
"The secret of happiness is freedom, and the secret of freedom, courage." Thucydides (B.C. 460-400)
Well, let's try to get it from the
CString
's consumer point of view: (1) requesting, via (explicit) cast a pointer to a const buffer means: "OK, I need the buffer but I'll not change it". (2) requesting viaGetBuffer()
a pointer to the internal buffer means: "I need the buffer to make all the weirdest things I know to it". Clearly method (2) is a bit crude for a mere copy operation. :-DIf the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke -
Well, let's try to get it from the
CString
's consumer point of view: (1) requesting, via (explicit) cast a pointer to a const buffer means: "OK, I need the buffer but I'll not change it". (2) requesting viaGetBuffer()
a pointer to the internal buffer means: "I need the buffer to make all the weirdest things I know to it". Clearly method (2) is a bit crude for a mere copy operation. :-DIf the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarkehi der, da getbuffr iz renamed in da latast sdk as
GetBufferIKnowWhatImDoing()
Nobody can give you wiser advice than yourself. - Cicero .·´¯`·->Rajesh<-·´¯`·. Codeproject.com: Visual C++ MVP
-
manju#123 wrote:
sEndDate = (LPCSTR)CurrentDate; Its not working ... plz help me
the
(LPCSTR)CurrentDate
returns a constant TCHAR pointer. you can make it compilable by makingsEndDate
as const. For instance,const _TCHAR *sEndDate;
If you want to modify the
sEndDate
, then you can useGetBuffer()
as suggested by Matthew Faithfull, But dont forget to callReleaseBuffer()
. Regards, Jijo._____________________________________________________ http://weseetips.com[^] Visual C++ tips and tricks. Updated daily.
Jijo raj wrote:
the (LPCSTR)CurrentDate returns a constant TCHAR pointer
wrong. it returns a const char pointer. (LP-C-T-STR) returns a const TCHAR*
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
-
Matthew Faithfull wrote:
it's not wrong but a GetBuffer() call would be better style
I don't agree. Implicit (or explicit) cast is not the same as
GetBuffer()
and you shouldn't use optionally one or the other:GetBuffer
returnsLPTSTR
, while the cast returnsLPCTSTR
: the addedC
have his significance. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain ClarkeI strongly second that. GetBuffer() is really to be forbidden for cast purpose
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
-
Hi experts... What about this?
_tcscpy(sEndDate,CurrentDate);
I am using this style. Is this wrong or right way?modified on Tuesday, May 27, 2008 7:42 AM
Maxim Zarus wrote:
Is this wrong or right way?
It's wrong since
sEndDate
has no storage space; it's just a pointer (to wherever)."Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
hi der, da getbuffr iz renamed in da latast sdk as
GetBufferIKnowWhatImDoing()
Nobody can give you wiser advice than yourself. - Cicero .·´¯`·->Rajesh<-·´¯`·. Codeproject.com: Visual C++ MVP
Indeed! :-D
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke -
Jijo raj wrote:
the (LPCSTR)CurrentDate returns a constant TCHAR pointer
wrong. it returns a const char pointer. (LP-C-T-STR) returns a const TCHAR*
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
-
Maxim Zarus wrote:
Is this wrong or right way?
It's wrong since
sEndDate
has no storage space; it's just a pointer (to wherever)."Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
you mean, first allocate memory for
sEndDate
then i can use_tcscpy_s()
. its ok. i agree. but is it also neccessary to allocate memory whenCString::GetBuffer()
has been used? because i have seen in pervious post nobody ask to allocate memory forCString::GetBuffer()
. regards, Maxim... :) -
Hi all.. I want to convert CString to _TCHAR* ////////////////////////////// _TCHAR *sEndDate; CString CurrDate; ///////////////////// I am trying this code.. sEndDate = (LPCSTR)CurrentDate; Its not working ... plz help me manju
Hi.. I am Mnaju.I have Completed my B.E Computers Science.Lokking for a job.I am interested in VC++ manju
And see The Complete Guide to C++ Strings, Part II - String Wrapper Classes[^] for more info about converts. ;)
-
you mean, first allocate memory for
sEndDate
then i can use_tcscpy_s()
. its ok. i agree. but is it also neccessary to allocate memory whenCString::GetBuffer()
has been used? because i have seen in pervious post nobody ask to allocate memory forCString::GetBuffer()
. regards, Maxim... :)Maxim Zarus wrote:
you mean, first allocate memory for sEndDate then i can use _tcscpy_s().
Yes.
Maxim Zarus wrote:
but is it also neccessary to allocate memory when CString::GetBuffer() has been used?
Not necessarily. It all depends on what you are going to be doing with the returned pointer.
Maxim Zarus wrote:
because i have seen in pervious post nobody ask to allocate memory for CString::GetBuffer().
CString::GetBuffer()
is very often misused."Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
OK - there's this extra layer of understanding that I have about the OP, since I've been interacting with her for quite sometime now. She will not be able to understand anything from CString source code. And that was the point behind me stating whatever to you.
Nobody can give you wiser advice than yourself. - Cicero .·´¯`·->Rajesh<-·´¯`·. Codeproject.com: Visual C++ MVP
thats why you are here.. to help people :-)
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
Never mind - my own stupidity is the source of every "problem" - Mixturecheers, Alok Gupta VC Forum Q&A :- I/IV Support CRY- Child Relief and You
-
thats why you are here.. to help people :-)
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
Never mind - my own stupidity is the source of every "problem" - Mixturecheers, Alok Gupta VC Forum Q&A :- I/IV Support CRY- Child Relief and You
Heh. :-D How's life going?
It is a crappy thing, but it's life -^ Carlo Pallini