2 q380981528 q380981528 于 2014.05.19 11:33 提问

MFC 中 CString转换成char[]数组

环境为vs2010

CString szText;
char a[1024];
edit1.GetWindowText(szText);//获取edit1编辑框的文本

怎么将CString类 szText 转换为char[]数组的内容?

memcpy(a,szText,1024);只能读取文本的第一个字符

3个回答

lym753024200
lym753024200   2014.05.19 12:38

MFC不建议用char类型了,你用TCHAR,宽字符的处理速度还快些

q380981528
q380981528 谢谢~
3 年多之前 回复
lym753024200
lym753024200 用WideCharToMultiByte可以把宽字符转换成多字节字符,也就是char类型
3 年多之前 回复
q380981528
q380981528 我这边是用动态链接库调用matlab函数的,那边的函数给的接口就是char数组形式的
3 年多之前 回复
u010082208
u010082208   2014.05.22 04:20

memcpy(a,(const char*)szText);

memcpy(a,szText.GetBuffer());

strncpy(a, szText.GetBuffer(), sizeof(a));

总之,要用CString::GetBuffer()取(内部的)字符串(sz)首址才可以。
——(const char*)szText会自动展开成szText.GetBuffer()调用;

BTW,既然用CString类型,则szText命名不妥,不如csText,而不妨将a数组命名为szA
:-)

sky79
sky79 error C2664: 'strncpy' : cannot convert parameter 2 from 'wchar_t *' to 'const char *'
2 年多之前 回复
phaethon4
phaethon4   2016.04.06 17:40

你这边的CString里存放的事实上是Unicode字符串,如果其中存放是英文字母。
由于Unicode一个字符占两位,高字节是0,用memcpy复制到char型字符串就会被当做'\0'于是字符串就被截断了,输出的只是第一位。
要实现你说的,可以用WideCharToMultiByte函数,具体可以参考:
http://www.cnblogs.com/gakusei/articles/1585211.html

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!