m_Source是对话框控件对应的变量,Cstring类型
我的目的是1.打开.dat文件  2.随机产生一系列的数,两种方法都能把结果放入m_Source在对话框上显示出来。
打开文件:void CAppZxyDlg::OnOpen()
随机产生:void CAppZxyDlg::OnRandom()数据放在CAppZxyDlg的public:int buffer[256]内显示时候调用void CAppZxyDlg::Display(DWORD BufferLength)  //BufferLength是数列的长度现在的结果:打开文件没有问题,但是随机怎么都不对。OnRandom得到了buffer,但是display()在memcpy那里无法copy过去!这是怎么回事?void CAppZxyDlg::OnOpen() 
{
UpdateData(TRUE); CString FN;
//char FileName[200];
char BASED_CODE szFilter[] ="源文件(*.dat)|*.dat|";
CFileDialog SrcFile(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
                 szFilter,NULL); 
if(SrcFile.DoModal()==IDOK)

        FN = SrcFile.GetPathName(); 
m_FileSrc = FN;
UpdateData(FALSE);
}
else
return;
CFile sourceFile;
CFileException e;
if (!sourceFile.Open(FN,
      CFile::modeRead | CFile::shareDenyWrite, &e))
{
TCHAR szError[1024];
e.GetErrorMessage(szError, 1024);
MessageBox("Open file failed");
MessageBox(szError);
return;
} DWORD nBytes = sourceFile.GetLength();
sourceFile.ReadHuge(Buffer,nBytes);
Display(nBytes);
BytesTransfer = nBytes;
return;
}void CAppZxyDlg::OnRandom() 
{
unsigned long RandomLength = 256;
for(int i = 0;i < (int)RandomLength;i++)
{
Buffer[i] = rand()*10/32767;
}
Buffer[RandomLength - 1] = '\0';
Display(RandomLength);
BytesTransfer = RandomLength;
}
void CAppZxyDlg::Display(DWORD BufferLength)
{ m_Source.Empty();
m_Receive.Empty();
UpdateData(TRUE);
memcpy(m_Source.GetBuffer(BufferLength),Buffer,BufferLength);
//strcpy(m_Source.GetBuffer(BufferLength),Buffer);
//strcat(Buffer,'\0');
//strcpy((char*)m_Source.GetBuffer(BufferLength),Buffer);
//SetDlgItemText(IDC_SOURCE,Buffer);
UpdateData(FALSE);
m_Source.ReleaseBuffer();
}

解决方案 »

  1.   

    1首先检查Buffer里面有没有数值。
    2 有可能你得到的随即机数都是非可见字符。
    Good Luck!
      

  2.   

    忘了,说一下,我已经试过的。
    OnRandom运行后,Buffer已经有了数值。0,5,1,8.....
    试过了在Buffer最后+上'\0'终止符
    试过修改类型。char,Cstring....
    试过用strcpy和strcat
    试过不用m_Source,直接在Buffer和IDC_SOURCE控件之间我觉得什么好像都试过了,就是不行。唉
      

  3.   

    将控件变量m_Source改成CEdit型的
      

  4.   

    如果buffer的第一个字符为0,则表示字符串为空,就会什么也不显示