个人博客
个人博客

  • 首页

  • 技术

  • 故事

  • 网络

  • 音乐

  • 经历

  • 关于

标题:sprintf函数的使用

《《《菜单在左边,触摸一下{3D效果哦!!!}
10月
10
我有故事,你有酒吗?

sprintf函数的使用

Post modified: 2019-10-10 14:03 • In 我有故事,你有酒吗? • • 阅读次数: 59
字数统计: 3,718 • 阅读时长 ≈ 14 min

学C语言的同学对printf函数都不陌生。从世界上第一个程序(我认为的)"hello world”到你手里正写的某个程序,都少不了printf的影子。不过你也许不知道,printf还有一些兄弟——比如wprintf、sprintf等。

过几天就要考C语言了,学校先把上机考试的系统公布了,里面有十几道测试题目让我们练练手。都是一些基础题,像什么水仙花数、哥德巴赫猜想之类的(好像这些题已成了必不可少的经典)。其中有一道题,简化一下就是这样:输入一个不长于9位的整数,输出每个位子上的数字的和,比如输入123,输出1+2+3=6。

基础题,用字符串来写可以是这样:

#include<stdio.h>void  main(){    char  ch[9]={'0'};    int  i=0,c,s=0;    while((c  =  getchar()) !=  '\n')       ch[i++]  =  c;    i=0;    while(ch[i]  !=  '\0')       s+=ch[i++]-'0';    printf("%d\n",s);}   

写题的时候发现,"不长于9位的整数"这个条件很微妙。9位就是亿位,我们知道long最大到21亿,也就是说我们这个数是可以保存在一个long型变量里的。就这样,我想到如果有一个现成的函数,能把一个数变成一个字符串,那就方便多了。非标准库里提供了一个itoa函数,标准库里提供了一个sprintf函数。

sprntf函数功能挺强大的,可以格式化任意类型的参数并存入字符串中。函数原型是这样:

int sprintf( char *buffer, const char *format, [ argument] … );

buffer是个字符串数组,保存我们需要得到的数据。format是个字符串,比如"%d%d",和printf里第一个参数相似。[argument]就是任意类型的数据,比如整型。

举个例子,sprintf(ch,"%ld",123456789); 什么意思?将长整型数123456789保存在字符数组ch里。就如同我们的printf("%ld",123456789);作用是输出长整型数123456789。

那么我们这一题还可以这样写:

#include<stdio.h>void  main(){  long n;  char  ch[10]={'0'};  int  i=0,s=0;  scanf("%d",&n);  sprintf(ch,"%ld",n); //将n格式化保存在字符数组ch中  while(ch[i]  !=  '\0')  s +=  ch[i++]-'0';  printf("%d\n",s);}

如此一来,程序好想了不少。不过,sprintf可不是我们想象中的那么简单,用不好也会给我们带来大麻烦。比如缓冲区溢出的问题,假如用户输入的数不止9位,ch数组可就装不下了,后果可不是程序出错那么简单。还有,sprintf的宽字节与窄字节问题与对中文的支持问题也不是那么简单,这些我都碰到过,以后再讲。

今天说到的这个用法确实可以使我们的程序简单多了。另外,我在文章开头提到了itoa函数,这个函数和sprintf函数效果相似,但因为不是标准库函数,所以部分编译软件并不能识别。(在windows下itoa函数一般来说可以使用)

函数原型:

char *itoa(int value, char *string, int radix);

value指被转换的整数,string指保存结果的字符数组,radix指转换成的进制。比如我想把23转换成二进制数保存在ch数组里,直接itoa(23,ch,2);就可以实现。相对的,还有一个函数atoi,大家google查查什么意思,以后也会经常用到。

AB一个伪青年博客

  • Post author: AB一个伪青年博客
  • Post link: https://shsh.abboke.com//rz/2019/1010/7036.html
  • 可下方留言哦!!!
上一篇:汉诺塔问题 下一篇:位运算处理进制转换问题
AB一个伪青年博客
AB一个伪青年博客 WeChat Pay

WeChat Pay

AB一个伪青年博客 Alipay

Alipay

悬笔e绝

AB一个伪青年博客

it程序猿_阿八博客,是一个记录生活与分享资讯的个人博客网站。『Www.AbboKe.Com』 程序猿👨‍💻‍~

64 技术
0 分类
36 标签
全站字数统计: 38.8k
友链
  • 阿八博客
  • 更多

✽-(ˆ▽ˆ)/✽✽\(ˆ▽ˆ)-✽

网站已运行:525天14小时24分14秒

粤ICP备18146903号

© 2018 阿八个人博客. 一个伪青年的个人博客,技术分享,本人经历过的坑;生活分享,分享有趣的程序生活

Made with by 阿八个人博客

4896 130208
  • 首页
  • 技术
  • 故事
  • 网络
  • 音乐
  • 经历
  • 关于
  • 留言板[ABboke.com]