sprintf()函数的用法

更新时间:2023-07-05 04:11:26 阅读: 评论:0

sprintf()函数的⽤法
sprintf函数的格式:int sprintf( char *buffer, const char *format [, argument,...] );理解力
除了前两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串
常⽤⽅式
sprintf函数的功能与printf函数的功能基本⼀样,只是它把结果输出到指定的字符串中了,看个例⼦就明⽩了:
例:将”test 1 2”写⼊数组s中
#include<stdio.h>int main(int argc, char *avgv[])
{
qff
char s[40]; sprintf(s,"%s%d%c","test",1,'2'); /*第⼀个参数就是指向要写⼊的那个字符串的指针,剩下的就和printf()⼀样了
你可以⽐较⼀下,这是向屏幕输⼊*/
printf("%s%d%c","test",1,'2'); return 0;
}12345678910
编译:
g++ sprinftest.cpp -o sprinftest && ./sprinftest
输出结果:
sprintftest12
sprintftest12
2.若”%s”等输出符在字符串中
例:补全字符串str的缺省内容
#include <iostream>#include <stdio.h>#include <cstring>int main(int argc, char *avgv[])
{ char str[] = "hel%co wo%sd! sp%stf test%d"; char buf[strlen(str)]; sprintf(buf, str, 'l', "rl", "rin", 1); std::cout << "str = "<< buf << "\nlen = " << strlen(buf) << std::endl; return 0;
}123456789101112
编译:
g++ sprinftest.cpp -o sprinftest && ./sprinftest
输出结果:
str = hello world! sprintf test1
len = 27
vipkid怎么样这种形式也可以将多个字符值或字符串值赋值到字符串str中,有多少个输出符就后⾯就加多少个参数。
本回答被⽹友采纳学习日语网
1
评论
分享
两者举报
冰丽荔
来⾃百度知道认证团队 2018-05-19
choo
sprintf的作⽤是将⼀个格式化的字符串输出到⼀个⽬的字符串中,⽽printf是将⼀个格式化的字符串输出到屏幕。
sprintf的第⼀个参数是⽬的字符串,如果不指定这个参数,执⾏过程中出现 "该程序产⽣⾮法操作,即将被关闭...."的提⽰。
因为C语⾔在进⾏字符串操作时不检查字符串的空间是否够⼤,所以可能会出现数组越界⽽导致程序崩溃的问题。
即使碰巧,程序没有出错,也不要这么⽤,因为早晚会出错。所以⼀定要在调⽤sprintf之前分配⾜够⼤的空间给buf。
sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] ... );
formotion
除了前两个参数类型固定外,后⾯可以接任意多个参数。⽽它的精华,显然就在第⼆个参数:格式化字符串上。
printf 和sprintf 都使⽤格式化字符串来指定串的格式,在格式串内部使⽤⼀些以“%”开头的格式说明符(format specifications)来占据⼀个位置,在后边的变参列表中提供相应的变量,最终
函数就会⽤相应位置的变量来替代那个说明符,产⽣⼀个调⽤者想要的字符串:
格式化数字字符串
sprintf 最常见的应⽤之⼀是把整数打印到字符串中,所以,spritnf 在⼤多数场合可以替代itoa。如:
1>把整数123 打印成⼀个字符串保存在s 中。
sprintf(s, "%d", 123); //产⽣"123"casual是什么意思
adjuster2>可以指定宽度,不⾜的左边补空格:
sprintf(s, "%8d%8d", 123, 4567); //产⽣:" 123 4567"
3>当然也可以左对齐:
sprintf(s, "%-8d%8d", 123, 4567); //产⽣:"123 4567"
4>也可以按照16 进制打印:
sprintf(s, "%8x", 4567); //⼩写16 进制,宽度占8 个位置,右对齐
sprintf(s, "%-8X", 4568); //⼤写16 进制,宽度占8 个位置,左对齐
这样,⼀个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要⼀种左边补0 的等宽格式,那该怎么做呢?很简单,在表⽰宽度的数字前⾯加个0 就可以了。
美味的英文sprintf(s, "%08X", 4567); //产⽣:"000011D7"
使⽤sprintf 的常见问题
sprintf 是个变参函数,使⽤时经常出问题,⽽且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误⽤导致的问题虽然严重,却很容易找出,⽆⾮就是那么⼏种情况,通常⽤眼睛再把出错的代码多看⼏眼就看出来了。
1>>缓冲区溢出
第⼀个参数的长度太短了,没的说,给个⼤点的地⽅吧。当然也可能是后⾯的参数的问题,建议变参对应⼀定要细⼼,⽽打印字符串时,尽量使⽤”%.ns”的形式指定最⼤字符数。
2>>忘记了第⼀个参数
低级得不能再低级问题,⽤printf ⽤得太惯了。
3>>变参对应出问题
通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤其是对应”*”的那些参数,都提供了吗?不要把⼀个整数对应⼀个”%s”。

本文发布于:2023-07-05 04:11:26,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1079199.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字符串   参数   程序   导致   输出
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图