nsprintf的用法

来源:互联网 发布:鬼冢虎 知乎 编辑:程序博客网 时间:2024/06/05 09:13

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, ...);

原创粉丝点击