首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

求帮忙,为什么小弟我用char[50]给CString赋值会少值

2014-07-09 
求帮忙,为什么我用char[50]给CString赋值会少值?本帖最后由 VisualEleven 于 2013-01-09 11:01:25 编辑1CS

求帮忙,为什么我用char[50]给CString赋值会少值?
本帖最后由 VisualEleven 于 2013-01-09 11:01:25 编辑

1CString m_StringID;
2CString m_StringPassword;
3CString m_StructData;          //将要传输给服务器的字符串
4char temp[50];
5
6REQU_EXCHANGE_DATA LoadData;
7LoadData.flag = 0x7878;
8LoadData.type = US_LOAD_ON;
9
10m_Edit_ID.GetWindowText(m_StringID);                  //获取用户输入的账号和密11码
12m_Edit_Password.GetWindowText(m_StringPassword);
13/*m_IDandPassword = m_StringID+m_space+m_StringPassword; */
14if(m_StringID.IsEmpty() || m_StringPassword.IsEmpty())
15{
16MessageBox(_T("账号或密码不能为空!"));
17return;
18}
19
20sprintf(LoadData.InstrumentID,"%s",m_StringID);         //Cstring转char[]
21sprintf(LoadData.TradingDay,"%s",m_StringPassword);
22
23memcpy(temp,&LoadData,sizeof(REQU_EXCHANGE_DATA));        //将结构体中的数据拷24贝到字符串中    
25m_StructData=temp;
26WSABUF wsabuf;
27DWORD dwsend;
28int len;
29SOCKADDR_IN addrto;
30
31addrto.sin_addr.S_un.S_addr = inet_addr("192.9.169.140");
32addrto.sin_family = AF_INET;
33addrto.sin_port = htons(9528);
34
 35   len = m_StructData.GetLength();      
36wsabuf.buf = m_StructData.GetBuffer(len);
37wsabuf.len = len+1;

if (SOCKET_ERROR == WSASendTo(socketUdp,&wsabuf,1,&dwsend,0,(SOCKADDR*)&addrto,sizeof(SOCKADDR),NULL,NULL))
{
int error = 0;
error = WSAGetLastError();
MessageBox((_T("Send(Login) data failed!")));
return;
}

我在客户端对话框中输入了账号(LoadData.InstrumentID)和密码(LoadData.TradingDay)分别为444和333,
因为我要将结构体中的数据传给服务器,所以将结构体memcpy给了char[50],
为什么我memcpy()后将char[50]直接赋值给CString类型对象后,
Cstring对象m_StructData中只有账号的值?
服务器只能收到我的账号444但是密码收到的全是乱码。
求大侠们帮忙
[解决办法]
string 转 char[] 以\0结尾,再从char[] 转会string时遇到第一个\0就认为结束了。
[解决办法]
memcpy(temp,&LoadData,sizeof(REQU_EXCHANGE_DATA));
你这个不能这样memcpy吧,你可以将你结构体中的数据格式化一下付给char[]数组temp
sprintf(temp, "%s - %s", LoadData.xxx, LoadData.xxx);
[解决办法]
像楼上说的一样,把2个字符串拼起来,自己在中间加分隔符
[解决办法]
可见字符和非可见字符
[解决办法]
memcpy(temp,&LoadData,sizeof(REQU_EXCHANGE_DATA));//没有字符串结束符
m_StructData=temp; 

改成这样
m_StructData = m_StringPassword + m_StructData; 

热点排行