如何把CString中的字符串赋值给char 型数组?

mensong 2002-09-17 07:16:56
我是在WIN CE下的 EVC编程,即为unicode系统的编程。

CString str = "中国";
char temp[100];

我试过GetBuffer(),当类型不匹配的时候也试过强制转换,可是temp中总不能得到正确的字符串。

GetBuffer()返回的是 LPTSTR 类型数据,据我了解这是unicode的指针型,怎么才能转换成char*呢?

先谢谢大家了!
...全文
735 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
nickymen 2003-02-25
  • 打赏
  • 举报
回复
可以使用memcpy
jhwang2k 2002-09-18
  • 打赏
  • 举报
回复
去看看专家的建议~~~

http://www.pgh.net/~newcomer/cstring.htm
autokee972615 2002-09-17
  • 打赏
  • 举报
回复
strcpy(char*, CString)
bljbljbljblj 2002-09-17
  • 打赏
  • 举报
回复
哈哈!看到我的名字了吗?我认为是最简单的,看看是否对你有启发!
zjblue 2002-09-17
  • 打赏
  • 举报
回复
GetBuffer
jian 2002-09-17
  • 打赏
  • 举报
回复
CString有重载符号[]

CString myString("abc");
那么
myString[1]='b';

只要用个循环语句就可以赋值了。循环的次数用CString.GetLength()确定
cywater2000 2002-09-17
  • 打赏
  • 举报
回复
来晚了
red-fly 2002-09-17
  • 打赏
  • 举报
回复
for(int i=0;i<str.GetLength();i++)
{
chararray(i)=str.GetAt(i);
}
Hanzo 2002-09-17
  • 打赏
  • 举报
回复
LPTSTR只有定义了_UNICODE才是wchr_t*, 否则是char*.
oldworm 2002-09-17
  • 打赏
  • 举报
回复
to stonespace(stonespace) :
看来你并不真懂,请看strncpy实现:
char * __cdecl strncpy (
char * dest,
const char * source,
size_t count
)
{
char *start = dest;

while (count && (*dest++ = *source++)) /* copy string */
count--;

if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0';

return(start);
}

当str比sizeof(temp)短的时候拷贝已经终止了,怎么会访问到越界?
Hanzo 2002-09-17
  • 打赏
  • 举报
回复
UNICODE用wchar_t来装.

wchar_t szUnicode[2];
char szBuf[4];
CString s = L"中国";

wcscpy( szUnicode, s );
strcpy( szBuf, szUnicode );
mensong 2002-09-17
  • 打赏
  • 举报
回复
上面两位的方法我试了,不行啊
GoAround 2002-09-17
  • 打赏
  • 举报
回复
LPTSTR不是unicode的指针,LPCWSTR才是。
你的长度设置对了吗?
试试
str.GetBuffer(str.GetLength())
ljan 2002-09-17
  • 打赏
  • 举报
回复
我的有点问题,不好意思...
stonespace 2002-09-17
  • 打赏
  • 举报
回复
to oldworm(oldworm)

你这样也不完善,有可能会出现读越界错误。(LPCTSTR)str可能比sizeof(temp)小,读越界有时候会导致系统异常:内存不可读。
oldworm 2002-09-17
  • 打赏
  • 举报
回复
严格地说,应该是这样:

char temp[...];

strncpy(temp, (LPCTSTR)str, sizeof(temp));
temp[sizeof(temp) -1] = 0;

用户 昵称 2002-09-17
  • 打赏
  • 举报
回复
memset( temp, 0, 100 );
strcat( temp, ( LPCTSTR )str );
ljan 2002-09-17
  • 打赏
  • 举报
回复
strcpy(temp, (LPTSTR)(LPCTSTR)str);
stonespace 2002-09-17
  • 打赏
  • 举报
回复
很简单:

strcpy(temp,(LPCTSTR)str);
ASSERT(sizeof(temp)>str.GetLength());

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧