鱼C论坛

 找回密码
 立即注册
查看: 14805|回复: 17

[函数快查] sprintf -- 写入格式化数据到字符串

[复制链接]
发表于 2016-2-11 18:54:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
sprintf 函数文档


函数概要:

printf 函数类似,不过 sprintf 函数是将格式化数据写入到字符串中。

缓冲区的尺寸必须足够大,以至于可以包含整个转换后的结果。(snprintf 函数是更安全的版本)

format 参数后边的额外参数数量由 format 决定,具体用法请参考 printf 函数中格式化占位符的解释。


函数原型:
#include <stdio.h>
...
int sprintf(char *str, const char *format, ...);

参数解析:

参数
含义
str 指向存放结果字符串的缓冲区
format 格式化字符串
... 可选参数,具体请参考 printf 函数文档


返回值:

如果函数调用成功,返回值是实际写入的字符数(不包含表示字符串结束的 '\0');

如果函数调用失败,返回值是一个负数。


演示:
#include <stdio.h>

int main()
{
        char buffer[256];
        int n;

        n = sprintf(buffer, "%d 加上 %d 的结果是:%d\n", 3, 5, 3 + 5);
        printf("%s长度是:%d\n", buffer, n);

        return 0;
}
搜狗截图20160212173219.png

版权归鱼C工作室(www.fishc.com)所有,转载请注明来源!

评分

参与人数 2荣誉 +6 鱼币 +6 贡献 +3 收起 理由
jkLoliTA + 5 + 5 + 3
还差几 + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-21 10:15:06 | 显示全部楼层
@小甲鱼 小甲鱼老师:为什么buffer的长度是28?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-7-17 16:18:08 | 显示全部楼层
我这里的运行结果是25,sprintf与printf的区别是:sprintf指定了格式化输出结果存储的地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-14 21:49:38 | 显示全部楼层
get it
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-12-29 15:51:14 | 显示全部楼层
SkyBurner 发表于 2016-4-21 10:15
@小甲鱼 小甲鱼老师:为什么buffer的长度是28?

由于在linux中中文字符占用3个字节,上面的:也是是中文字符注意不要忘了占位符也算一字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

发表于 2018-3-11 12:03:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-9 20:55:04 | 显示全部楼层
weiy、 发表于 2017-12-29 15:51
由于在linux中中文字符占用3个字节,上面的:也是是中文字符注意不要忘了占位符也算一字节

啥是占位符?大佬

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-15 22:22:23 | 显示全部楼层
cookies945 发表于 2019-1-9 20:55
啥是占位符?大佬

就是 %s %d %f
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-3-18 21:07:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-8 10:32:29 | 显示全部楼层

多个占位符也只算一个字节吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-4 22:22:12 | 显示全部楼层
s+printf?还有这样的函数!才知道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-12 13:20:24 | 显示全部楼层
sprint 和print的区别是什么啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-19 19:13:51 | 显示全部楼层
呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-16 10:29:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-19 11:49:03 | 显示全部楼层
请问为什么我将演示中的buffer[256]改为 char *buffer 运行结果为空,sprintf函数的第一个参数需要的不就是一个字符指针作为地址吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-21 14:13:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-24 21:20:54 | 显示全部楼层
没太明白          n长度是28知道   统计的是  sprintf“打印出的字”的数量      
可是最后   printf里面   %s ...   ,buffer...         这里真没看明白  去掉了    就会打印错误    这个的存在的原理是什么啊   迷糊了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-8 11:15:43 | 显示全部楼层
经过中文测试,返回值是被写入转换结果的大小(字节)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表