求高手帮忙,UDP广播socket接收字符不能完全显示,该如何解决

求高手帮忙,UDP广播socket接收字符不能完全显示
接收端 //进入无限循环接受广播消息的过程
while(true)
{
printf("等待中……\n");
recvfrom( s, buf, 256, 0, (struct sockaddr FAR *)&from, (int FAR *)&fromlength );
printf("接收到广播消息:%s\n\n",buf);
ZeroMemory(buf,256);
          }
[size=16px]

发送端
void CTttDlg::OnButton1() 
{

UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。
CString buf1=m_str;
char *pData;
pData = new char[strlen(buf1)+1];
strcpy(pData, buf1);

BOOL optval=TRUE;
sockaddr_in addr;
WSADATA wsdata;

WSAStartup(0x0202,&wsdata);

addr.sin_family = AF_INET;
addr.sin_port = htons((u_short)5002);  //广播消息的端口
addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);  //广播地址
memset( &(addr.sin_zero), 0, sizeof(addr.sin_zero) );

SOCKET S = socket(AF_INET, SOCK_DGRAM, 0);   //设置指定套接字可以发送广播消息


setsockopt( S, SOL_SOCKET, SO_BROADCAST, (char*)&optval, sizeof(optval) );

sendto( S, pData, sizeof(pData), 0, (sockaddr*)&addr, sizeof(addr) );


}[/size]
发送端调试pData中可以完全接受键盘输入字符——输入:我在调试程序,pData接收到,但是运行接收端时,第一次点发送端发送,收到:我在烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
之后点击发送,只能接收到:我在
发送英文只能接受四个字母,调试里面缓冲区buf[4]-buf[255]里面都没有东西
应该怎么处理,才能把通过套接字接受过来的数据全部写进buf中并显示出来呢?

------解决方案--------------------
sizeof(pdata)是1,所以不对,需要使用strlen()
------解决方案--------------------
说错是4
------解决方案--------------------
memset(buf, 0, 256);初始化一下即可