怎么从CString 变到 const char*?

一鸣惊天 2011-11-04 10:45:15


//我按孙鑫视频15课编的,vc6下好好的。

CString str;
GetDlgItemTextW(IDC_EDIT4,str);
int num;
num=str.GetLength()+1;
sendto(m_socket,str,num,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
SetDlgItemTextW(IDC_EDIT4,L"");

/*报错:vs2010\mfc\聊天室\聊天室\聊天室dlg.cpp(233): error C2664: 'sendto' : cannot convert parameter 2 from 'CString' to 'const char *'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
*/

//然后,我改了一下,
CString str;
GetDlgItemTextW(IDC_EDIT4,str);
int num;
num=str.GetLength()+1;
char*pch;
pch=new char[num;
memset(pch,0,num);
memcpy(pch,str.GetBuffer(num),num);
sendto(m_socket,pch,num,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
SetDlgItemTextW(IDC_EDIT4,L"");
编译通过,只是我在运行时,在IDC_EDIT4中输入几个字符,在另一个显示编辑框IDC_EDIT3中只显示1个字符,比如我输“skfjsj”,IDC_EDIT3只显示s.

]
...全文
204 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangf0802 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 9 楼 xhxingyi 的回复:

引用 7 楼 shiyunqiang 的回复:

项目-》属性-》配置属性-》字符集-》使用多字节字符集

按照上面的步骤改一下试试。


懂了,谢谢


你最终还是用了 多字节,你应该用unicode 的.
那样你的程序通用性好,离开了微软你的程序照样可以用。
[/Quote]



要是继续用UNICODE的话,该如何改程序呐, 请教
架构师Wu老七 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xhxingyi 的回复:]

引用 7 楼 shiyunqiang 的回复:

项目-》属性-》配置属性-》字符集-》使用多字节字符集

按照上面的步骤改一下试试。


懂了,谢谢
[/Quote]

你最终还是用了 多字节,你应该用unicode 的.
那样你的程序通用性好,离开了微软你的程序照样可以用。


一鸣惊天 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shiyunqiang 的回复:]

项目-》属性-》配置属性-》字符集-》使用多字节字符集

按照上面的步骤改一下试试。
[/Quote]

懂了,谢谢
rh742831388 2011-11-05
  • 打赏
  • 举报
回复
这个问题至少 看了10遍了,就是unicode 跟ansi编码的问题,自己去看相关的资料
shiyunqiang 2011-11-05
  • 打赏
  • 举报
回复
项目-》属性-》配置属性-》字符集-》使用多字节字符集

按照上面的步骤改一下试试。
一鸣惊天 2011-11-05
  • 打赏
  • 举报
回复
求人理
一鸣惊天 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 alfacuton 的回复:]

你肯定用的是 unicode.
涉及到字符转化,微软太恶心了,自己的那一套和unicode 不通用..
[/Quote]

刚学MFC ,不懂
一鸣惊天 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 likezhaobin 的回复:]

我运行了一下你的程序
memcpy(pch,str.GetBuffer(num),num);
这一行运行结束后,字符串是正确的,
你现在就检查一下你接收端取字符的时候是不是哪里出错了,不行了就把程序贴上来,看看
[/Quote]

不行,贴程序,这个不好贴,mfc到处是代码,我QQ:854120886,可否,远程协助一计,感激不尽。
架构师Wu老七 2011-11-04
  • 打赏
  • 举报
回复
你肯定用的是 unicode.
涉及到字符转化,微软太恶心了,自己的那一套和unicode 不通用..
Eleven 2011-11-04
  • 打赏
  • 举报
回复
CString转成char*
WideCharToMultiByte();(UNICODE下);
或者使用USES_CONVERSIONS; T2A();
加泰罗尼亚 2011-11-04
  • 打赏
  • 举报
回复
我运行了一下你的程序
memcpy(pch,str.GetBuffer(num),num);
这一行运行结束后,字符串是正确的,
你现在就检查一下你接收端取字符的时候是不是哪里出错了,不行了就把程序贴上来,看看
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 在Qt框架中,QSerialPort类被视为一个关键组件,用于执行与串行端口之间的通信任务,它具备多样化的功能,涵盖了串口的开启与关闭操作,以及波特率、数据位、停止位和奇偶校验等参数的设定,同时还包括数据的发送和接收功能。在标题和描述中提及的“Qt5的QSerialPort类通过信号槽实现串口读写”,这代表了一种在Qt编程中普遍采用的事件驱动策略,借助信号槽机制,能够便捷地管理串口数据的传输与接收。 1. **QSerialPort类的基础操作**: - 初始化阶段:必须构建一个QSerialPort实例,并为其指定串口名称,例如"/dev/ttyUSB0"。 - 参数配置:利用`setPortName()`、`setBaudRate()`、`setDataBits()`、`setParity()`、`setStopBits()`、`setFlowControl()`等方法,依据具体需求对串口参数进行配置。 - 串口开启/终止:借助`open()`方法启动串口,通过`close()`方法终止串口。务必验证`isOpen()`的返回状态,以确保操作的有效性。 2. **信号槽机制的应用**: - 信号的生成:QSerialPort类中定义了若干信号,诸如`readyRead()`表明有数据可读,`error()`指示出现错误,`bytesWritten()`显示数据已传输等。当这些事件发生时,将触发相应的信号。 - 槽函数的关联:相应地,可以将这些信号与自定义的槽函数相连接,比如,当`readyRead()`信号被激活时,可以调用一个用于处理读取数据的函数。 3. **串口数据...

16,550

社区成员

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

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

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