通俗易懂说:snprintf scnprintf

  • 1. snprintf
    • 1.1 原型
    • 1.2 参数:
    • 1.3 返回值:
    • 1.4 【snprintf 正确用法】
  • 2. scnprintf - 非 linux函数
    • 2.1 原型
    • 2.2 参数:
    • 2.3 返回值:
    • 2.4 scnprintf 实现 - 非linux 函数
  • 3. 区别:
  • 4. 例子

1. snprintf

1.1 原型

int snprintf(char *buff, size_t size, const char *format, …)

1.2 参数:

buff: 用于保存格式化输出的缓冲区
size:格式化输出缓冲区长度
format:格式化输出的格式
……: 表示可参数扩展,根据format确定

1.3 返回值:

该接口返回的长度是源字符串的长度,并不是实际写入的字符串长度。
即: 格式化后字符串的长度,返回值可能比传入的size大。

1.4 【snprintf 正确用法】

第二个参数为目的缓冲区的剩余空间大小。

由于该接口返回的长度是源字符串的长度,并不是实际写入的字符串长度。
故该接口不适合累加拼装,仅用于单次拼装。

CHAR  szTest[STR_LENGTH + 1];
snprintf(szTest, sizeof(szTest), "%s-%d", "911Car", 911);

2. scnprintf - 非 linux函数

2.1 原型

int scnprintf(char *dest, size_t size, const char *format, …)

2.2 参数:

dest: 用于保存格式化输出的缓冲区
size:格式化输出缓冲区长度
format:格式化输出的格式
……: 表示可参数扩展,根据format确定

2.3 返回值:

返回实际拷入dest的字符串的长度,不包括 ‘\o'结束符。

2.4 scnprintf 实现 - 非linux 函数

man中没有

#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>INT scnprintf(OUT CHAR *pcBuf, IN size_t ulSize, IN const CHAR *pcFmt,...)
{va_list args;INT iRetLen = 0;va_start(args, pcFmt);iRetLen = vsnprintf(pcBuf, ulSize, pcFmt, args);va_end(args);return ((iRetLen >= (INT)(UINT)ulSize) ? ((INT)(UINT)ulSize - 1) : iRetLen);
}

3. 区别:

返回值的不同:

  1. snprintf 返回源字符串的长度,可能比目标缓冲区大
  2. scnprintf 返回实际拷入目标缓冲区的长度,不包括\0

4. 例子

 char szBuf[10] = {0};int iLen = snprintf(szBuf,sizeof(szBuf),"123456789abcde");printf("After snprintf the buf is "%s \n iLen is %d\n",szBuf,iLen);结果:After snprintf the buf is 123456789iLen is 14//scnprintf 需要自己实现,非linux库函数int iLen = scnprintf(szBuf,sizeof(szBuf),"123456789abcde");printf("After scnprintf the buf is "%s\n iLen is %d\n",szBuf,iLen);结果:After scnprintf the buf is 123456789iLen is 9

或:

char acStr[128] = "1234567890";
int iIndex = 100;
scnprintf(szBuf, sizeof(szBuf), "%s.%02d", acStr, iIndex );

通俗易懂说:snprintf scnprintf相关推荐

  1. scnprintf和snprintf的区别

    int snprintf(char *buf, size_t size, const char *fmt, ...) int scnprintf(char *buf, size_t size, con ...

  2. Java注解---通俗易懂

    本文转载于Java注解-最通俗易懂的注解 Annotation 中文译过来就是注解.标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解. 我个人认为,比较糟糕的技术文 ...

  3. 通俗易懂,到底什么是区块链?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 2017年9月4日,中国政府正式明令禁止ICO和数字货币交易行为,随即关闭了多个数字货币交易所.同时政府也多次声明,不会 ...

  4. 通俗易懂!使用Excel和TF实现Transformer

    作者 | 石晓文 转载自小小挖掘机(ID:wAIsjwj) 本文旨在通过最通俗易懂的过程来详解Transformer的每个步骤! 假设我们在做一个从中文翻译到英文的过程,我们的词表很简单如下: 中文词 ...

  5. 通俗易懂讲解梯度下降法!

    Datawhale干货 作者:知乎King James,伦敦国王大学 知乎 | https://zhuanlan.zhihu.com/p/335191534 前言:入门机器学习必须了解梯度下降法,虽然 ...

  6. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  7. 通俗易懂的ReentrantLock,不懂你来砍我

    前言 自己开的坑,跪着也要填完,欢迎来到Java并发编程系列第五篇ReentrantLock,文章风格依然是图文并茂,通俗易懂,本文带读者们深入理解ReentrantLock设计思想. 认识下Reen ...

  8. OKR简单通俗易懂的介绍,1分钟了解什么是OKR工作法

    OKR简单通俗易懂的介绍,1分钟了解什么是OKR工作法

  9. 通俗易懂:快速理解ipv4的NAT穿透原理

    NAT基础   IPv4由于最初的设计原因,长度只有32位,所以只提供了大约40亿个地址.这造成了地址耗尽危机.   NAT(Network Address Translation,网络地址转换),也 ...

最新文章

  1. java工单自动化流程控件,一种工单审批的自动化处理方法及系统与流程
  2. SELECT 与 SET 对变量赋值的区别(存储过程)
  3. Linux查看设备 eth,lspci grep Eth,查看Linux下的各种硬件设备是否识别或存在之用
  4. C语言(CED)从键盘输入一些整数,求出它们的平均值。数据的个数事先不确定,在输入过程中以ctrl+z键(EOF)作为输入结束的标记。
  5. Visual Studio—— IntelliSense: #error 指令: Please use the /MD switch for _AFXDLL builds
  6. 现代信号处理——阵列信号处理(阵列信号的高分辨处理)
  7. Linux基础知识、常用命令和操作
  8. 7.19作业 防火墙知识,调研总结,包括但不限于与原理,设备使用,厂商介绍,形成报告
  9. 卸载32位office安装64位office卸载不完全导致不能安装64位office时解决办法
  10. 每天一点产品思考(3):“稍后阅读”功能真的能有效解决碎片信息处理问题吗?...
  11. SpringBoot+Vue中使用AES进行加解密(加密模式等对照关系)
  12. 樊登读书会终身成长读后感_《终身成长》读后感三篇
  13. 陈老师撕B志玲姐姐的热门微博数据分析
  14. 大数据毕设 航空公司客户价值分析
  15. 如何解决我的电脑中文件搜索速度很慢的问题?
  16. 从Java 8 到 Java 14,几个令人印象深刻的新特性
  17. Vue3 学习总结笔记 (十四)
  18. 读书笔记 摘自:《Google工作整理术》
  19. PTA 【L2】紧急救援
  20. SD女仆–系统清洁工具v4.14.35 [专业版] [Mod Lite] [最新]

热门文章

  1. java计算机毕业设计古玩玉器交易系统源码+mysql数据库+系统+lw文档+部署
  2. 基于JAVA校园疫情信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  3. mybatis 九大动态标签详解
  4. 日志显示格式%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
  5. 计算机键盘优点,机械键盘有哪些优点
  6. springboot整合redis缓存报错
  7. Java+webdriver的自动化测试框架搭建
  8. vue 和 react的对比
  9. 基于Java+vue实现高校学科竞赛项目系统详细设计
  10. Java面试题3(jsp)