入库程序调了半天,发现是strncpy的使用上有问题,打印日志如下:
- 2012-05-22 16:52:18 DEBUG Rcvhost:[.my3456.com],OldHost:[.my3456.com]. RcvTime:[60737], OldTime[60737].
- 2012-05-22 16:52:28 DEBUG Rcvhost:[.654xs.com],OldHost:[.my3456.com]. RcvTime:[60747], OldTime[60737].
- 2012-05-22 16:52:28 DEBUG after strncpy RecvHost:[.654xs.com],UserInfo.CtrlHost:[.654xs.comm].
改正后的代码如下:
- g_DbToLog.PrintLog(DEBUG_LEVEL, "Rcvhost:[%s],OldHost:[%s]. RcvTime:[%u], OldTime[%u].",
- MainHost, UserInfo.CtrlHost, RecvTime, UserInfo.CtrlTime);
- if (strcmp(UserInfo.CtrlHost,MainHost)==0 && (RecvTime-UserInfo.CtrlTime)<4)
- {
- return false;
- }
- else
- {
- UserInfo.CtrlTime = RecvTime;
- strncpy(UserInfo.CtrlHost, MainHost, sizeof(UserInfo.CtrlHost));
- g_DbToLog.PrintLog(DEBUG_LEVEL, "after strncpy RecvHost:[%s],UserInfo.CtrlHost:[%s].",MainHost, UserInfo.CtrlHost);
- Update(UserInfo);
- 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
转载于:https://blog.51cto.com/linlinhust/872857