C语言:sprintf() 您所在的位置:网站首页 c语言函数功能大全 C语言:sprintf()

C语言:sprintf()

2023-09-12 12:58| 来源: 网络整理| 查看: 265

C语言 基础开发----目录

一、sprintf()简介 1. 函数原型 int sprintf(char *string, char *format [,argument,...]); 2. 参数 string – 这是指向一个字符数组的指针,该数组存储了 C 字符串。format – 格式化字符串,结构与printf函数一样为:%[flags] [width] [.prec] [length] type。[argument]… – 参数表,根据不同的 format 字符串,有不同的参数表。 3. 功能

把格式化的数据写入某个字符串缓冲区。

4. 头文件

#include

5. 返回值

如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。 sprintf 返回以format为格式argument为内容组成的结果被写入string的字节数,结束字符‘\0’不计入内。即,如果“Hello”被写入空间足够大的string后,函数sprintf 返回5。

二、sprintf() 用法

sprintf函数的功能与printf函数的功能基本一样,只是它把结果输出到指定的字符串中。

1. 把整数打印到字符串中

具体代码如下:

#include int main(void) { char sdata[200]={0}; sprintf(sdata,"%d",520); printf("%s\n",sdata); sprintf(sdata, "%-6d%6d", 520,5231); //默认右对齐 printf("%s\n",sdata); sprintf(sdata, "0x%06x 0X%06X", 520,5231); //小写和大写16进制 printf("%s\n",sdata); return 0; }

运行结果如下:

520 520 5231 0x00146f 0X00146F 2. 控制浮点数打印格式

具体代码如下:

#include int main(void) { char sdata[200]={0}; sprintf(sdata, "%f", 3.1415926); //%f默认保留小数点后6 位 printf("%s\n",sdata); sprintf(sdata, "%8.3f", 3.1415626); //指定宽度,不足的左边补空格: printf("%s\n",sdata); sprintf(sdata, "%.3f", 3.1415626); //不指定总宽度 printf("%s\n",sdata); return 0; }

运行结果如下:

3.141593 3.142 3.142 3. 连接字符串

sprintf() 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连接字符串。sprintf() 能够一次连接多个字符串(自然也可以同时在它们中间插入别的内容,总之非常灵活)。 具体代码如下:

#include int main(void) { char sdata[200]={0}; char* who = "I"; int m = 100; sprintf(sdata, "%s love %d 元.", who,m);//简单的字符串拼接 printf("%s\n",sdata); return 0; }

运行结果如下:

I love 100 元. 4. 打印地址信息

具体代码如下:

#include int main(void) { char sdata[200]={0}; int n=0; sprintf(sdata,"%u",&n);//十进制地址 printf("%s\n",sdata); sprintf(sdata,"%08X",&n);//十六进制地址 printf("%s\n",sdata); sprintf(sdata,"%p",&n); // 专用打印地址 printf("%s\n",sdata); return 0; }

运行结果如下:

6356556 0060FE4C 0060FE4C 5. 利用sprintf 的返回值

sprintf() 返回了本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf 调用结束以后,你无须再调用一次strlen 便已经知道了结果字符串的长度。 具体代码如下:

#include int main(void) { char sdata[200]={0}; int len=0; len=sprintf(sdata,"%s!","I love you"); printf("len=%d\ndata=%s\n",len,sdata); len+=sprintf(sdata+len,"%d",1314); printf("len=%d\ndata=%s\n",len,sdata); len+=sprintf(sdata+len,"--%p。",&len); printf("len=%d\ndata=%s\n",len,sdata); return 0; }

运行结果如下:

len=11 data=I love you! len=15 data=I love you!1314 len=27 data=I love you!1314--0060FE4C。 三、使用sprintf() 常见问题

sprintf() 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况。

缓存区溢出: 第一个参数分配的长度太短了,尽量大一点,打印字符串时,尽量使用”%.ns”的形式指定最大字符数。忘记第一个参数: 低级得不能再低级问题,用printf 用得太惯了。变参对应出问题: 通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有