新手问题:小弟在MFC中使用sprintf()函数将CString转换成char[]时,char[]只接受第一个字符

darkblue111 2006-02-28 05:29:52
小弟MFC新手
在MFC中使用sprintf()函数将CString转换成char[]时,char[]只接受第一个字符

使用的是VS2005

CString name;
dbName="test";
char cname[100];
sprintf(cname,"%s",name);

执行完这个后cname只保存第一个字符,也就是t,郁闷...
...全文
901 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
asssf3214 2010-06-12
  • 打赏
  • 举报
回复
因为CString包含的是宽字符,第一个字节的高8位都是0,转成char时,高8位被认为是字符串结束符,当然只有一个字符啦
darkblue111 2006-03-03
  • 打赏
  • 举报
回复
以后用2003不用2005
结帖!!
真相重于对错 2006-03-01
  • 打赏
  • 举报
回复

你是怎么知道只传了第一个字符??
yangyong1980919 2006-03-01
  • 打赏
  • 举报
回复
代码我试过,没有问题,不过我的环境是VC6.0,对于这段代码我想不是问题。
darkblue111 2006-03-01
  • 打赏
  • 举报
回复
我就是用AfxMessagebox()输出看到只有一个字母的啊

现在我已经把VS2005卸载了
装了VS2003,这个问题也解决了
不知道2005都做了什么工作,唉...
真相重于对错 2006-03-01
  • 打赏
  • 举报
回复
你用Trace(cname);或者AfxMessagebox输出一下看看
darkblue111 2006-03-01
  • 打赏
  • 举报
回复
我设置了断点发现只接收了一个字符
darkblue111 2006-02-28
  • 打赏
  • 举报
回复
刚试过了,还是不行哦,还是只有一个字符

上面提问的代码帖错了一点点
正确的如下:

CString name;
name="test";
char cname[100];
sprintf(cname,"%s",name);
yangyong1980919 2006-02-28
  • 打赏
  • 举报
回复
你什么时候对name赋的值?
这样试试
CString name;
name="test";
char cname[100] = {0};
sprintf(cname,"%s",(LPCTSTR)name);

7,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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