入库程序调了半天,发现是strncpy的使用上有问题,打印日志如下:

 
  
  1. 2012-05-22 16:52:18 DEBUG Rcvhost:[.my3456.com],OldHost:[.my3456.com]. RcvTime:[60737], OldTime[60737]. 
  2. 2012-05-22 16:52:28 DEBUG Rcvhost:[.654xs.com],OldHost:[.my3456.com]. RcvTime:[60747], OldTime[60737]. 
  3. 2012-05-22 16:52:28 DEBUG after strncpy RecvHost:[.654xs.com],UserInfo.CtrlHost:[.654xs.comm]. 

改正后的代码如下:

 
  
  1. g_DbToLog.PrintLog(DEBUG_LEVEL, "Rcvhost:[%s],OldHost:[%s]. RcvTime:[%u], OldTime[%u]."
  2.     MainHost, UserInfo.CtrlHost, RecvTime, UserInfo.CtrlTime); 
  3. if (strcmp(UserInfo.CtrlHost,MainHost)==0 && (RecvTime-UserInfo.CtrlTime)<4) 
  4.     return false
  5. }  
  6. else 
  7.     UserInfo.CtrlTime = RecvTime; 
  8.     strncpy(UserInfo.CtrlHost, MainHost, sizeof(UserInfo.CtrlHost)); 
  9.     g_DbToLog.PrintLog(DEBUG_LEVEL, "after strncpy RecvHost:[%s],UserInfo.CtrlHost:[%s].",MainHost, UserInfo.CtrlHost); 
  10.     Update(UserInfo); 
  11.     return true

strncpy(UserInfo.CtrlHost, MainHost, sizeof(UserInfo.CtrlHost));

这里原来是strncpy(UserInfo.CtrlHost, MainHost, strlen(MainHost));

 

strncpy的用法说明,参考:

strcpy与strncpy函数 Memset 转载 

http://anwj336.blog.163.com/blog/static/894152092010524105439599/

 

memcopy和memmove 区别(另strcpy(), strncpy()和memset())

http://blog.csdn.net/deutschester/article/details/5852215