您的位置:首页 > 其它

strncpy要与sizeof搭配使用,而不是strlen

2012-05-22 17:30 232 查看
入库程序调了半天,发现是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
本文出自 “林子” 博客,请务必保留此出处http://linlinhust.blog.51cto.com/5128561/872857
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: