nsprintf的用法

extern long nsprintf(char *str, unsigned long ulLen, const char *str, char *fmt, ...);

 

 

这个函数是h3c的私有实现,与sprintf的区别是,函数返回值为源字符串的长度。最大拼装长度是ulLen,并且字符串尾部不自动加“/0“

 

函数的不合适用法:

 

 

nsprintf(szUserName, sizeof(szUserName), "abcdefg");

 

 

函数中将常量字符串作为入参是不允许的。原因是,常量字符串需要消耗局部存储空间,可以将需要输出字符串定义为全局变量,入参改为字符串首地址。

 

 

 

 

nsprintf(szUserName, sizeof(szUserName), pstExecData->szUsername);

 

这种用法也是不合适的,因为字符串pstExecData->szUsername中本身可能带有%s格式化字符,后果如何待确定。

 

正确的用法是:

 

nsprintf(szUserName, sizeof(szUserName), "%s",pstExecData->szUsername);

 

 

可以定义lint规则帮助检查

 

 

 

 

 

 

 

定义规则: lintheader.h

extern long sprintf (char *str, const char *str, char *fmt, ...);

extern long nsprintf(char *str, unsigned long ulLen, const char *str, char *fmt, ...);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值