这个是我程序客户端的代码,我用的是VC2008,我发送过去只能接收到最开始的一个字母。
请问如何解决
typedef struct {        int option;   //用户登陆  4 ,用户注册 5
char username[20];
char password[20];
}userInfo;
         
 char name[20] ,password[20];
   int port = 8888;
          GetDlgItem(IDC_IPADDRESS)->GetWindowText(ip);
   GetDlgItemText(IDC_NAME,(LPTSTR)&name,20);
       GetDlgItemText(IDC_PWD,(LPTSTR)&password,20);      memset((char *)&user_Info,0,sizeof(user_Info)); 
           user_Info.option = USERLOGIN;
   memcpy(user_Info.username , name , 20);
   memcpy(user_Info.password , password, 20);     send(s,(char *)&user_Info,sizeof(user_Info)+1,0);
    MessageBox(_T("连接成功!"),_T("提示信息"),0);

解决方案 »

  1.   

    Unicode的关系,VS2008默认为unicode字符集,所以你的username和password里存储的是unicode编码。而你在接收时肯定用了strlen、strcpy之类的函数,只要遇到0就是字符串结束,所以只收到第一个字母。处理的时候按unicode处理就行了,使用unicode相关函数。还有,这里有越界
    GetDlgItemText(IDC_NAME,(LPTSTR)&name,20); 
    GetDlgItemText(IDC_PWD,(LPTSTR)&password,20);强转为宽字符以后,长度应该为原来的一半,否则就是越界
      

  2.   

    我以前也遇到过这样的情况,你传中文的话就不会只接到第一个字符了,不信你试试。
    其实主要还是Unicode 的问题,VS2008默认采用unicode。你不如使用多字节来做这个东西