晕, 又是CString 与 char 之间的转换问题, 谢谢各位了!

qiudacheng 2007-10-12 02:00:07
在VC6.0的环境下:
/*
我从一串口读出了15个16进制数据, 并且存放在fromPortData数组中,
现在我要把fromPortDat里的15个数据转成10进制之后,
通过以下方式全部存入在 char p[15]中,
但运行却出错, 不知道为什么, 请赐教, 谢谢!
*/
#include "stdio.h"
char fromPortDat[15];
// ......
CString cStr, ccStr;
char p[i];
for(int i = 0; i <= 14; i++)
{
cStr.Format("%u", fromPortData[i]);
//把每个fromPortData里的数据转成10进制
MessageBox(cStr); //这句没问题

//以下3句就出问题了, 不知道什么原因
strcpy(&p[i], cStr); //本来是打算把 cStr 一个一个复制到p[i]里的
ccStr.Format("%s", p[i]);
MessageBox(ccStr);
}

//请高手们不吝赐教, 在下深表谢意!




...全文
174 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
luojinzhong2002 2007-10-18
  • 打赏
  • 举报
回复
关于CString与char之间的转换,最简单的方法是借助于String,
因为,CString与String之间有转换函数,String与char之间又互相
转换函数,直接调用内置函数,就可轻易实现!!请楼主,查一下他们的
转换函数就很容易解决!!
qiudacheng 2007-10-18
  • 打赏
  • 举报
回复
啊, 答应了帮别人加分, 上次打算加的, 但系统提示说:"此贴发出时间不到5天"
今天已经过了5天了, 再加分, 发现系统提示说:"你无权使用此功能!"

上面的几位帮助我的朋友, 对不起呀, 实在加不到分.
飞哥 2007-10-12
  • 打赏
  • 举报
回复
呵呵
我等着
lz厚道
qiudacheng 2007-10-12
  • 打赏
  • 举报
回复
我按了, 但是提示说:"此贴发出时间不到5天"
是不是要5天后才能加? 如果是的话, 我会记得帮你们加分的, 谢谢!
quentinliu 2007-10-12
  • 打赏
  • 举报
回复
在管理帖子或者帖子加分里,最底下的那个回复上
qiudacheng 2007-10-12
  • 打赏
  • 举报
回复
怎么给分? 我不会呀? 你教我吧. 我真的不会给分.
quentinliu 2007-10-12
  • 打赏
  • 举报
回复
给点分,表忘记。嘻嘻
quentinliu 2007-10-12
  • 打赏
  • 举报
回复

char *p
for(int i = 0; i <= 14; i++)
{
cStr.Format("%u", fromPortData[i]);
}

p = cStr.GetBuffer(0);
cStr.ReleaseBuffer();
ccStr.Format("%s", (LPCTSTR)p);
MessageBox(ccStr);

qiudacheng 2007-10-12
  • 打赏
  • 举报
回复
经过wanfustudio和quentinliu 两位高手的相助, 在下的问题终于解决了, 在此对以上两位朋友表示真诚的咸谢!
qiudacheng 2007-10-12
  • 打赏
  • 举报
回复
#include "stdio.h"
char fromPortDat[15];
// ......
CString cStr, ccStr;
char p[i];
for(int i = 0; i <= 14; i++)
{
cStr.Format("%u", fromPortData[i]);
//把每个fromPortData里的数据转成10进制

//以下几句就出问题了, 不知道什么原因
p[i] = cStr.GetBuffer(10);
cStr.ReleaseBuffer();
ccStr.Format("%s", p[i]);
MessageBox(ccStr);
}

当我写入以上的代码后:
出错提示:

MainFrm.cpp
D:\C++ Project\\SolarControlSystem\MainFrm.cpp(296) : error C2440: '=' : cannot convert from 'char *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast

谢谢以上2位一直帮助我, 不管困难有没有解决, 在下依仍非常感谢!
quentinliu 2007-10-12
  • 打赏
  • 举报
回复
他用的for循环,逻辑上不太舒服,不过语法上是可以的,你的code完全可以改成

CString s= "test for you";
char p[100];
memset(p,0,100);
strcpy(p,(LPCTSTR)s);
AfxMessageBox(p,1,1);
飞哥 2007-10-12
  • 打赏
  • 举报
回复

CString s= "test for you";
char p[100];
memset(p,0,100);

int len = 0;
char *t = s.GetBuffer(len);
strcpy(p,s);
AfxMessageBox(p);

飞哥 2007-10-12
  • 打赏
  • 举报
回复
不用看了,你是前面那个&p[i]不对
飞哥 2007-10-12
  • 打赏
  • 举报
回复
不行,你报啥错啊
我从不用MFC的,说出来给你破个例,呵呵
quentinliu 2007-10-12
  • 打赏
  • 举报
回复

strcpy(&p[i], (LPCTSTR)cStr); 

这样看看行不行?

strcpy(&p[i], (char*)cStr); 

qiudacheng 2007-10-12
  • 打赏
  • 举报
回复
4楼的朋友你好, 我用strcpy(&p[i], cStr.GetBuffer(i)); 这个方法, 但是出错, 不知道什么原因.
quentinliu 2007-10-12
  • 打赏
  • 举报
回复

strcpy(&p[i], cStr.GetBuffer(i)); 


qiudacheng 2007-10-12
  • 打赏
  • 举报
回复
不好意思, 应该是 char p[15]; 我写错了.
2楼的朋友, 你说得对, 应该是我的strcpy(&p[i], cStr); 这一句出错了
你说要使用cStr.GetBuffer提取出char*,然后拷贝
请给出一个具体例子好吗?
谢谢 1楼和2楼的答复!
飞哥 2007-10-12
  • 打赏
  • 举报
回复
strcpy(&p[i], cStr); //本来是打算把 cStr 一个一个复制到p[i]里的

这句不对啊
strcpy需要传入的参数是char*
你传入的是CString,不行,应该使用cStr.GetBuffer提取出char*,然后拷贝,或者你用Format后的那个
quentinliu 2007-10-12
  • 打赏
  • 举报
回复
你的语句逻辑上好像很有问题啊
char p[i];
i已经定义了?后卖for()里重新定义,结果在vc6.0下会告诉你redefine吧
CString 不是字符串,是ms定义的哦,不能用strcpy那种方式,
strcpy原型是char *strcpy(char *str1, char *str2);
你想可以直接用 “=”把一个cstring对象赋值个另一个。
老实说,你的逻辑好像不太对啊,会不会出现太多的弹出对话框?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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