snprintf函数用法

int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...);

函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。

函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。

Result1(推荐的用法)

#include <stdio.h>
#include <stdlib.h>

int main()
{
     char str[10]={0,};
     snprintf(str, sizeof(str), "0123456789012345678");
     printf("str=%s/n", str);
     return 0;
}


root] /root/lindatest
$ ./test
str=012345678

 

Result2:(不推荐使用)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char str[10]={0, };
    snprintf(str, 18, "0123456789012345678");
    printf("str=%s/n", str);
    return 0;
}


root] /root/lindatest
$ ./test
str=01234567890123456

 

snprintf函数返回值的测试:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char str1[10] ={0, };
    char str2[10] ={0, };
    int ret1=0,ret2=0;
    ret1=snprintf(str1, sizeof(str1), "%s", "abc");
    ret2=snprintf(str2, 4, "%s", "aaabbbccc");
    printf("aaabbbccc length=%d/n", strlen("aaabbbccc"));
    printf("str1=%s,ret1=%d/n", str1, ret1);
    printf("str2=%s,ret2=%d/n", str2, ret2);
    return 0;
}

[root] /root/lindatest
$ ./test
aaabbbccc length=9
str1=abc,ret1=3
str2=aaa,ret2=9


解释SIZE:

 #include <stdio.h>
#include <stdlib.h>
int main()
{
char dst1[10] ={0, },dst2[10] ={0, };
char src1[10] ="aaa",src2[15] ="aaabbbcccddd";
int size=sizeof(dst1);
int ret1=0, ret2=0;
ret1=snprintf(dst1, size, "str :%s", src1);
ret2=snprintf(dst2, size, "str :%s", src2);
printf("sizeof(dst1)=%d, src1=%s, /"str :%%s/"=%s%s, dst1=%s, ret1=%d/n", sizeof(dst1), src1, "str :", src1, dst1, ret1);
printf("sizeof(dst2)=%d, src2=%s, /"str :%%s/"=%s%s, dst2=%s, ret2=%d/n", sizeof(dst2), src2, "str :", src2, dst2, ret2);
return 0;
}
root] /root/lindatest
$ ./test
sizeof(dst1)=10, src1=aaa, "str :%s"=str :aaa, dst1=str :aaa, ret1=8
sizeof(dst2)=10, src2=aaabbbcccddd, "str :%s"=str :aaabbbcccddd, dst2=str :aaab, ret2=17

补充一下,snprintf的返回值是欲写入的字符串长度,而不是实际写入的字符串度。如:
char test[8];
int ret = snprintf(test,5,"1234567890");
printf("%d|%s/n",ret,test);

运行结果为:
10|1234

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

virtualbox主机网络管理 未能创建_如何在 VirtualBox 中增加现有虚拟机的磁盘大小 | Linux 中国...

导读&#xff1a;你可以在 VirtualBox 中扩大虚拟硬盘&#xff0c;即使在创建之后也可以。                   本文字数&#xff1a;1434&#xff0c;阅读时长大约&#xff1a;2分钟https://linux.cn/article-12869-1.html作者&#xff1a;Dimitrios Savvopoulos译者…

java 迪米特法则_迪米特法则

文章首发于个人博客 shuyi.tech&#xff0c;欢迎点击原文跳转阅读。 设计模式说白了就是传统经验的总结&#xff0c;它能让我们在合适的场景使用合适的模式&#xff0c;从而加快我们的编程速度&#xff0c;也能提高系统的扩展性、稳定性。这里我想就设计模式提出两个观点&#…

js中的==与===的区别

""&#xff1a; 1&#xff0c;如果两表达式的类型不同&#xff0c;则试图将它们转换为字符串、数字或 Boolean 量。 2&#xff0c;NaN 与包括其本身在内的任何值都不相等。 3&#xff0c;负零等于正零。 4&#xff0c;null 与 null 和 undefined 相等。 5&#x…

sql 2000 安装问题

1. 安装时报command line option syntax error.type command /?for help 去掉安装文件的中文路径 2. 安装完成后&#xff0c;打开企业管理器&#xff0c;出现mmc无法初始化管理单元。 原因是之前安装的sqlserver2000没有卸载干净 1) 彻底删除C:\Program Files\Microsoft SQL …

mysql 交换工资_LeetCode:627.交换工资

题目给定一个 salary 表&#xff0c;如下所示&#xff0c;有 m 男性 和 f 女性 的值。交换所有的 f 和 m 值(例如&#xff0c;将所有 f 值更改为 m&#xff0c;反之亦然)。要求只使用一个更新(Update)语句&#xff0c;并且没有中间的临时表。注意&#xff0c;您必只能写一个 …

usb长包数据结束判断_如何判断南桥好坏 判断南桥好坏方法介绍【详解】

南桥是电脑里重要的零部件&#xff0c;南桥芯片主要是负责I/O接口等一些外设接口的控制、IDE设备的控制及附加功能等等。那么南桥发生故障&#xff0c; 怎么判断南桥好坏 呢?一、通过测PCI槽、AGP槽对地打阻值可判定南北桥有无损坏1、PCI槽中所有的AD复合线对地打阻值都为300&…

C++ MFC界面读写USB HID设备数据程序

发一个简单易用的界面&#xff0c;用来对USB HID设备&#xff08;比如说游戏手柄&#xff0c;控制面板等&#xff09;读写数据&#xff0c;一般情况下面板上有一些LED&#xff0c;可以帮助我们测试读写是否正确。另外&#xff0c;需要可以修改vendorID和prodcutID,这样一个界面…

nano-pc-t1 4412 显示驱动分析

1. 和其它内核代码类似。 显示驱动的分析都是由 drivers/video/fbmem.c开始&#xff0c;fbmem.c是显示驱动的抽象&#xff0c;实际只是一个框架性的东西。 fbmem_init 中实现了一个字符设备驱动&#xff0c;并创建了class&#xff0c;但是没有生成设备文件。 这个字符设备驱动的…

mysql中索引约束有哪些_Mysql中索引和约束的示例语句

外键查询一个表的主键是哪些表的外键SELECTTABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAMEFROMINFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERETABLE_SCHEMA mydbnameAND REFERENCED_TABLE_NAME 表名;导出所有外键语句SELECTCONCAT(ALTER …

taskkill无法终止进程 拒绝访问_解决删除文件时,提示无法删除的问题

有时我们想删除某个程序文件夹&#xff0c;或是卸载后残留的一些 .dll 等后缀的文件&#xff0c;却一直提示 “运行中” 、 “权限不足” &#xff0c;甚至用第三方的强力删除功能都无法删除。这时我们可以用系统自带的命令行功能&#xff0c;使用几个简单的小命令就可以彻底删…

javascript删除数组里的对象

Array.prototype.del function(value) {//删除数组中指定的元素&#xff0c;返回新数组function hasValue(array, value) {for(var i 0; i < array.length; i) {if (value array[i]) {return i;}}return -1;}var position hasValue(this, value);var temp new Array ;i…

擦窗机器人测试标准_擦窗机器人,我选择玻妞的三个理由!

很多人都喜欢高层&#xff0c;一览无遗&#xff0c;广阔风景&#xff01;可现实是无论什么高层湖景都会被窗户上日积月累的灰尘遮挡的严严实实&#xff0c;每次擦窗都累到怀&#xff01;疑&#xff01;人&#xff01;生&#xff01;于是一年又一年&#xff0c;你想要的风景始终…

Oracle客户端与java_Oracle 谈 JavaFX 及 Java 客户端技术的未来

原标题&#xff1a;Oracle 谈 JavaFX 及 Java 客户端技术的未来据 Oracle 博客称&#xff0c;从 JDK 11 开始&#xff0c;Oracle 将从 JDK 中删除 JavaFX&#xff0c;但在 2022 年之前&#xff0c;Oracle 还会继续为 JDK 8 中的 JavaFX 提供商业支持。2011 年&#xff0c;JavaF…

基于Passthru的NDIS开发的个人理解

基于Passthru的NDIS开发的个人理解 这几天对NDIS的学习&#xff0c;基本思路是&#xff1a;首先熟悉理论知识→然后下载一个例子进行研究→最后例子自己模仿扩展→最最后尝试自己写一个新的。 Passthru是微软NDIS自己写的一个框架驱动&#xff0c;NDIS开发者可以在此框架上进行…

Conversion to Dalvik format failed with error 1

如题&#xff0c;解决办法是将工程中的 Android Private Libraries移除即可

char类型包括数字吗java_Java char 与 Character

1. java中char类型占2个字节、16位能够存放汉子&#xff0c;字母和数字占一个字节&#xff0c;一个字节8位&#xff0c;中文占2个字节&#xff0c;16位&#xff1b;java2. char类型赋值编码char a’a’; //任意单个字符&#xff0c;加单引号。char a’中’;//任意单个中文字&am…

HDOJ 4253 Two Famous Companies 二分+MST

题目意思&#xff1a;给出n个点&#xff0c;m条边&#xff0c;边分为两种&#xff0c;一种是A公司的&#xff0c;一种是B公司的。边上有权值&#xff0c; 问用n-1条边把n个点连起来的最小费用是多少&#xff0c;其中A公司的边刚好有k条。题目保证有解。 题解&#xff1a;题目意…

低代码开发平台_低代码开发平台测评——伙伴云

​本次测评的产品严格来说不算低代码开发平台&#xff0c;它自己给自己的定位更多是全流程数据生产力平台。不过它依然具备应用搭建的关键要素&#xff0c;而且在数据管理方面还比较出彩&#xff0c;所以不能放过它——伙伴云&#xff0c;这款由Discuz&#xff01;主创团队操刀…

java 返回js_如何基于java或js获取URL返回状态码

这篇文章主要介绍了如何基于java或js获取URL返回状态码,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参fgLAeaGAH考下描述&#xff1a;使用java或者js访问某个网站&#xff0c;返回状态码1.java实现// 用getResponse…

Linux 信号signal处理函数

alarm&#xff08;设置信号传送闹钟&#xff09; 相关函数 signal&#xff0c;sleep 表头文件 #include<unistd.h> 定义函数 unsigned int alarm(unsigned int seconds); 函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数se…