博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
snprintf 函数用法
阅读量:4061 次
发布时间:2019-05-25

本文共 1016 字,大约阅读时间需要 3 分钟。

snprintf()函数用于将格式化的数据写入字符串,其原型为:
    int snprintf(char *str, int n, char * format [, argument, ...]);
【参数】str为要写入的字符串;n为要写入的字符的最大数目,超过n会被截断;format为格式化字符串,与printf()函数相同;argument为变量。
【返回值】成功则返回参数str 字符串长度,失败则返回-1,错误原因存于errno 中。
snprintf()可以认为是sprintf()的升级版,比sprintf()多了一个参数,能够控制要写入的字符串的长度,更加安全,只要稍加留意,不会造成缓冲区的溢出。
snprintf()与sprintf()使用方法类似,请参考:C语言sprintf()函数
注意:snprintf()并不是标C中规定的函数,但是在许多编译器中,厂商提供了其实现的版本。
在GCC中,该函数名称就snprintf(),而在VC中称为_snprintf()。由于不是标准函数,没有一个统一的标准来规定该函数的行为,所以导致了各厂商间的实现版本可能会有差异。
差异发生在参数 n。在GCC中,参数n是要向str写入3个字符,包括'\0'字符;在VC中,参数n是要写入的字符串的总字符数。
在GCC中运行如下程序:
#include <stdio.h>
int main()
{
    char str[5];
    int ret = snprintf(str, 3, "%s", "abcdefg");
    printf("%d\n",ret);
    printf("%s",str);
    return 0;
}
输出:
7
ab
在VC中运行如下程序:
#include <stdio.h>
int main()
{
    char str[5];
    int ret = _snprintf(str,3,"%s","abcdefg");
    printf("%d\n",ret);
    printf("%s",str);
    return 0;
}
输出:
-1
abc
从输出结果可以知道:
GCC中的参数n表示向str中写入n个字符,包括'\0'字符,并且返回实际的字符串长度。
VC中的参数n表示会向str中写入n个字符,不包括'\0'字符,并且不会在字符串末尾添加'\0'符。当字符串长度超过参数n时,函数返回-1,以表示可能导致错误。

转载地址:http://ylbji.baihongyu.com/

你可能感兴趣的文章
MongoDB数据库插入、更新和删除操作详解
查看>>
MongoDB文档(Document)全局唯一ID的设计思路
查看>>
mongoDB简介
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
redis sharding方案
查看>>
程序员最核心的竞争力是什么?
查看>>
Node.js机制及原理理解初步
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>