今天写了一段很sb的代码,现在整出来希望以后不再犯这么简单错误,以下只是局部代码,但是还是能说明我想说的问题.

 for(i=header;i!=tail;)
     {
      if(ShareMem[i]=='\n')
      {
       StrBuff=(char*)malloc(sizeof(char)*MAXBUFF);//记得释放所分配的内存,防止内存泄漏
       ZeroMemory(StrBuff,sizeof(char)*MAXBUFF);
       for(;header!=i;)
       {
        *StrBuff++=ShareMem[header];
        header=(header+1)%MAXBUFF;
       }
       *StrBuff='\0';
       
#ifdef ANALYSISGPSDATA_H_
       DWORD wds;
       ZeroMemory(strLog,sizeof(char)*MAXBUFF);
       memcpy(strLog,StrBuff,strlen(StrBuff));
       strLog[strlen(strLog)]='\r';
       strLog[strlen(strLog)]='\n';                
       WriteFile(file,strLog,strlen(strLog),&wds,NULL);
#endif
  
       DispatchGMessage((HWND)value,StrBuff);
       break;
      }
      i=(i+1)%MAXBUFF;
     }

在使用的过程中我移动了StrBuff指针,之后我用使用StrBuff作为参数传给了DispatchGMessage,但是此时StrBuff已经指向了字符串的末尾,在DispatchGMessage获得不了我真正所需的字符串。如下代码为修改版本:

 for(i=header;i!=tail;)
     {
      if(ShareMem[i]=='\n')
      {
       strBuffTemp=StrBuff=(char*)malloc(sizeof(char)*MAXBUFF);//记得释放所分配的内存,防止内存泄漏
       ZeroMemory(StrBuff,sizeof(char)*MAXBUFF);
       for(;header!=i;)
       {
        *strBuffTemp++=ShareMem[header];
        header=(header+1)%MAXBUFF;
       }
       *strBuffTemp='\0';
       
#ifdef ANALYSISGPSDATA_H_
       DWORD wds;
       ZeroMemory(strLog,sizeof(char)*MAXBUFF);
       memcpy(strLog,StrBuff,strlen(StrBuff));
       strLog[strlen(strLog)]='\r';
       strLog[strlen(strLog)]='\n';                
       WriteFile(file,strLog,strlen(strLog),&wds,NULL);
#endif
  
       DispatchGMessage((HWND)value,StrBuff);
       break;
      }
      i=(i+1)%MAXBUFF;
     }