subject_13943.htm

来自「一些关于vc的问答」· HTM 代码 · 共 108 行

HTM
108
字号
<p>
序号:13943 发表者:regicals 发表日期:2002-09-01 16:28:10
<br>主题:如何将CString转化成char*呢?
<br>内容:如何将CString转化成char*呢?<BR>请各位高手指教!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:不懂 回复日期:2002-09-01 16:34:15
<br>内容:用LPCTSTR强制转换
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Norton AntivVirus 回复日期:2002-09-01 16:37:25
<br>内容:干吗要转换呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:啊志 回复日期:2002-09-01 16:56:44
<br>内容:CString str="123456789";<BR>char ss[255];<BR>ss=str.GetBuffer(str.GetLength);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:regicals 回复日期:2002-09-01 18:05:12
<br>内容:ss=str.GetBuffer(str.GetLength()); ???<BR><BR>好像编译通不过。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:regicals 回复日期:2002-09-01 18:09:31
<br>内容:CString str="123456789";<BR>char ss[255];<BR>ss= LPCTSTR(str);<BR><BR><BR>出错信息:<BR>cannot convert from 'const char *' to 'char [255]'
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:regicals 回复日期:2002-09-01 18:17:57
<br>内容:&nbsp;&nbsp;&nbsp;&nbsp;CString str = "good";<BR>&nbsp;&nbsp;&nbsp;&nbsp;char tmp[200] ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;sprintf(tmp, "%s",str);<BR><BR>这样应该可以吧。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:曾立文 回复日期:2002-09-01 19:11:48
<br>内容:应该这样<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString str = "good";<BR>&nbsp;&nbsp;&nbsp;&nbsp;char tmp[200] ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;sprintf(tmp, "%s",(LPCSTR)str);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:regicals 回复日期:2002-09-04 11:58:55
<br>内容:在sprintf(tmp, "%s",(LPCSTR)str); 中为何一定要(LPCSTR)强制类型转换?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:西泠雪 回复日期:2002-09-04 14:32:25
<br>内容:也可以用要需要使用(char*)的时候使用CString类的str时,这样使用就可了(LPTSTR)(LPCTSTR)str
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:hn 回复日期:2002-09-04 17:42:06
<br>内容:CString str<BR>char c[256];<BR>strcpy(c, str);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:理文 回复日期:2002-09-04 23:16:35
<br>内容:在sprintf(tmp, "%s",(LPCSTR)str); 中为何一定要(LPCSTR)强制类型转换? <BR>因为(LPCSTR)str处本来应该是char*或char[]的,而str是CString<BR>直接用就不行,必须转换。<BR>所以需要使用(char*)的时候,而你的为CString,都可以用(LPCTSTR)强制转换<BR>在MSDN关于CString中有这样一段话<BR>You can freely substitute CString objects for const char* and LPCTSTR function arguments.<BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:regicals 回复日期:2002-09-09 09:27:24
<br>内容:多谢各位如此热心为小弟的这么个简单问题解答,<BR>只可惜小弟只能接受其中之一呀!<BR>由此我也看到了vchelp的希望,看到了中国软件的希望。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:史列因 回复日期:2002-09-09 10:44:01
<br>内容:&nbsp;&nbsp;&nbsp;&nbsp;楼上说的都有问题:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;(LPCSTR)str这种强制转换相当于:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;(LPTSTR)(LPCTSTR)str <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;也就是包含了一个调用类型转换运算符的隐式转换。这就是需要LPCTSTR的地方可以直接传递CString对象的原因。另外,因为CString类有一个以LPCTSTR为参数的构造函数,所以需要CString的地方可以直接传递LPCTSTR(char *当然也可以了)。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;然而,LPCTSTR是const char *,也就是说,得到的字符串是不可写的!将其强制转换成LPTSTR去掉const,是极为危险的!一不留神就会完蛋!要得到char *,应该用GetBuffer()或GetBufferSetLength(),用完后再调用ReleaseBuffer()。论坛上有一个贴子是关于CStirng的总结,对此进行了详细说明。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;对于:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CString str="123456789";<BR>&nbsp;&nbsp;&nbsp;&nbsp;char ss[255];<BR>&nbsp;&nbsp;&nbsp;&nbsp;ss= LPCTSTR(str);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;因为ss是char * const,也就是说,指针ss的值是不可改变的,当然会出错。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;而:<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString str<BR>&nbsp;&nbsp;&nbsp;&nbsp;char c[256];<BR>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(c, str); <BR>&nbsp;&nbsp;&nbsp;&nbsp;有一个效率上的问题,另外,因为没有边界检查,可能产生越界访问的错误。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:理文 回复日期:2002-09-09 16:02:08
<br>内容:一般来说,用LPCTSTR 将CString转化成char*就是为了类型匹配,<BR>就此情景而言,作为源,最方便,快捷,也不会出问题。<BR>不必用GetBuffer()或GetBufferSetLength()。<BR>如果作为目标,当然不能这样用,但用GetBuffer也不合适。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Wang Tao 回复日期:2002-09-11 08:50:26
<br>内容:char mychar[12345];<BR>CString source="Hello";<BR>strcpy(&mychar,(LPCTSTR)source);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:史列因 回复日期:2002-09-11 09:33:10
<br>内容:mychar[12345];<BR>没搞错吧,你的栈有多大?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Wang Tao 回复日期:2002-09-11 10:41:09
<br>内容:只是个例子啦,一般1024就够了,不过在就必须<BR>strcpy((char*)&mychar,(LPCTSTR)source);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?