我使用结构体进行网络传送。typedef struct {        int option;   //用户登陆  4 ,用户注册 5
char username[20];
char password[20];
}userInfo;
这是我的结构体定义,我用send(s,(char *)&user_Info,sizeof(user_Info)+1,0);发送。用recv(accept_client,(char *)&user_Info,sizeof(userInfo),0);接收,但接收的数据username和password都只有一个字符。我的编译器是VS2008 以前用VC6从没出现过这问题。有没有可以解答一下,急求

解决方案 »

  1.   

    vs2008下是用UNICODE的
    建议把char都换成TCHAR
      

  2.   

      userInfo user_Info;
       CString  ip;
       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);这是基本的代码,其它的倒都也没什么,先从EDIT中得到用户输入的用户名。COPY给USERINFO结构体变量,用send(s,(char *)&user_Info,sizeof(user_Info)+1,0)发送,接收端是个控制台下的程序,和这也差不多,用recv(accept_client,(char *)&user_Info,sizeof(userInfo),0)接收。这只是用户登陆时候的验证过程,我用 printf("%d   \r\n用户名:%s\r\n密码:%s\r\n",user_Info.option,user_Info.username,user_Info.password);打印贴出来,只能收到username,password的第一个字符,以后的都不能收到,它们的字符串长度都为1.好像在没发送前我测试它们的字符串长度也是1,应该是你说的  宽字符当窄字符处理造成的   但问题是怎么解决,我正在做毕设,很急 ,谢谢大家