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

请帮小弟我看看这个字符串处理的有关问题,多谢

2012-01-12 
求助:请各位大哥帮我看看这个字符串处理的问题,谢谢!//读取串口dwBufferLength个字符到Buffer返回实际读到

求助:请各位大哥帮我看看这个字符串处理的问题,谢谢!
//读取串口   dwBufferLength个字符到   Buffer   返回实际读到的字符数     可读任意数据
  DWORD   Read(LPVOID   Buffer,   DWORD   dwBufferLength,   DWORD   dwWaitTime   =   10)
  {
    if(!IsOpen())
      return   0;
   
    COMSTAT     Stat;
    DWORD   dwError;
   
    if(::ClearCommError(_hCommHandle,   &dwError,   &Stat)   &&   dwError   >   0)
    {
      ::PurgeComm(_hCommHandle,   PURGE_RXABORT   |   PURGE_RXCLEAR);
      return   0;
    }
   
    if(!Stat.cbInQue)   //   缓冲区无数据
      return   0;
   
    unsigned   long   uReadLength   =   0;
   
    dwBufferLength   =   dwBufferLength   >   Stat.cbInQue   ?   Stat.cbInQue   :   dwBufferLength;
   
    if(!::ReadFile(_hCommHandle,   Buffer,   dwBufferLength,   &uReadLength,   &_ReadOverlapped))  
    {
      if(::GetLastError()   ==   ERROR_IO_PENDING)  
      {
        WaitForSingleObject(_ReadOverlapped.hEvent,   dwWaitTime);   //   结束异步I/O
        if(!::GetOverlappedResult(_hCommHandle,   &_ReadOverlapped,   &uReadLength,   false))
        {
          if(::GetLastError()   !=   ERROR_IO_INCOMPLETE)
            uReadLength   =   0;
        }
      }
      else
        uReadLength   =   0;
    }
   
    return   uReadLength;
  }
  //读取串口   dwBufferLength   -   1   个字符到   szBuffer   返回ANSI   C   模式字符串指针   适合一般字符通讯
  char   *   ReadString(char   *szBuffer,   DWORD   dwBufferLength,   DWORD   dwWaitTime   =   20)
  {
    unsigned   long   uReadLength   =   Read(szBuffer,   dwBufferLength   -   1,   dwWaitTime);
    szBuffer[uReadLength]   =   '\0 ';
    return   szBuffer;
  }
  //写串口   可写任意数据   "abcd "   or   "\x0\x1\x2 "
  DWORD   Write(LPVOID   Buffer,   DWORD   dwBufferLength)
  {
    if(!IsOpen())
      return   0;
   
    DWORD   dwError;
   
    if(::ClearCommError(_hCommHandle,   &dwError,   NULL)   &&   dwError   >   0)  
      ::PurgeComm(_hCommHandle,   PURGE_TXABORT   |   PURGE_TXCLEAR);  
   
    unsigned   long   uWriteLength   =   0;
   
    if(!::WriteFile(_hCommHandle,   Buffer,   dwBufferLength,   &uWriteLength,   &_WriteOverlapped))
      if(::GetLastError()   !=   ERROR_IO_PENDING)
        uWriteLength   =   0;


     
      return   uWriteLength;
  }
 
 
 
 
 

/*************处理串口接受到的信息*****************************
LRESULT   On_Receive(HDC   hdcs)
{
int   len1;                           //缓冲区字符长度
char   str[2];
//char   *str1;
len1   =   com2.GetInputSize();
if(len1   >   1)
{
          str1=com2.Read(str,2);
          MessageBox(NULL,   TEXT(str),   TEXT( "COM2 "),   MB_OK);
}

return   0;
}
//*************处理串口接受到的信息*****************************


当我用串口软件向   串口发送   字符串   "11 "

可是   弹出的是   "11烫 "   呢?

这是什么原因啊?


是不是需要用函数   ReadString   啊?

如果用   ReadString   ,那么处理串口接收的这段程序应该怎么写?


谢谢!

[解决办法]
字符串最后面加 '\0 '
[解决办法]
/*************处理串口接受到的信息*****************************
LRESULT On_Receive(HDC hdcs)
{
int len1; //缓冲区字符长度
char str[3]; // <======
// char *str1;
len1 = com2.GetInputSize();
if(len1 > 1)
{
str1=com2.Read(str,2);
str1[2] = '\0 '; // <=============
MessageBox(NULL, TEXT(str), TEXT( "COM2 "), MB_OK);
}

return 0;
}
//*************处理串口接受到的信息*****************************

字符串以 '\0 '作为结尾符。

热点排行