itoa()和sprintf()函数爱测试的猫咪

char*itoa(intvalue,char*string,intradix);

把整数转换成字符串

value:被转的整数值

string:保存转后的字符串的变量

radix:按几进制转换(10,8,2,16进制等)

#include#includeintmain(void){intnumber=12345;charstring[25];itoa(number,string,10);printf("integer=%dstring=%s\n",number,string);return0;}2.sprintf()函数

itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf,用法和printf相似。

sprintf是个变参函数,定义如下:intsprintf(char*buffer,constchar*format[,argument]...);

格式化数字字符串sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf在大多数场合可以替代itoa。

如://把整数123打印成一个字符串保存在s中。sprintf(s,"%d",123);//产生"123"可以指定宽度,不足的左边补空格:sprintf(s,"%8d%8d",123,4567);//产生:"1234567"当然也可以左对齐:sprintf(s,"%-8d%8d",123,4567);//产生:"1234567"也可以按照16进制打印:sprintf(s,"%8x",4567);//小写16进制,宽度占8个位置,右对齐sprintf(s,"%-8X",4568);//大写16进制,宽度占8个位置,左对齐

这样,一个整数的16进制字符串就很容易得到,但我们在打印16进制内容时,通常想要一种左边补0的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0就可以了。sprintf(s,"%08X",4567);//产生:"000011D7"上面以”%d”进行的10进制打印同样也可以使用这种左边补0的方式。

这里要注意一个符号扩展的问题:比如,假如我们想打印短整数(short)-1的内存16进制表示形式,在Win32平台上,一个short型占2个字节,所以我们自然希望用4个16进制数字来打印它:shortsi=-1;sprintf(s,"%04X",si);产生“FFFFFFFF”,怎么回事?因为spritnf是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底是个4字节的整数还是个2字节的短整数,所以采取了统一4字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32位的整数-1,打印时4个位置不够了,就把32位整数-1的8位16进制都打印出来了。

如果你想看si的本来面目,那么就应该让编译器做0扩展而不是符号扩展(扩展时二进制左边补0而不是补符号位):sprintf(s,"%04X",(unsignedshort)si);就可以了。或者:unsignedshortsi=-1;sprintf(s,"%04X",si);

sprintf和printf还可以按8进制打印整数字符串,使用”%o”。注意8进制和16进制都不会打印出负数,都是无符号的,实际上也就是变量的内部编码的直接的16进制或8进制表示。

控制浮点数打印格式浮点数的打印和格式控制是sprintf的又一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后6位数字,比如:sprintf(s,"%f",3.1415926);//产生"3.141593"但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m表示打印的宽度,n表示小数点后的位数。比如:sprintf(s,"%10.3f",3.1415626);//产生:"3.142"sprintf(s,"%-10.3f",3.1415626);//产生:"3.142"sprintf(s,"%.3f",3.1415626);//不指定总宽度,产生:"3.142"

注意一个问题,你猜inti=100;sprintf(s,"%.2f",i);会打出什么东东来?“100.00”?对吗?自己试试就知道了,同时也试试下面这个:sprintf(s,"%.2f",(double)i);第一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟i相对应的格式控制符是个”%f”。而函数执行时函数本身则并不知道当年被压入栈里的是个整数,于是可怜的保存整数i的那4个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。不过,如果有人有兴趣使用手工编码一个浮点数,那么倒可以使用这种方法来检验一下你手工编排的结果是否正确。

字符/Ascii码对照我们知道,在C/C++语言中,char也是一种普通的scalable类型,除了字长之外,它与short,int,long这些类型没有本质区别,只不过被大家习惯用来表示字符和字符串而已。(或许当年该把这个类型叫做“byte”,然后现在就可以根据实际情况,使用byte或short来把char通过typedef定义出来,这样更合适些)于是,使用”%d”或者”%x”打印一个字符,便能得出它的10进制或16进制的ASCII码;反过来,使用”%c”打印一个整数,便可以看到它所对应的ASCII字符。以下程序段把所有可见字符的ASCII码对照表打印到屏幕上(这里采用printf,注意”#”与”%X”合用时自动为16进制数增加”0X”前缀):for(inti=32;i<127;i++){printf("[%c]:%3d0x%#04X",i,i,i);}

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

缓冲区溢出第一个参数的长度太短了,没的说,给个大点的地方吧。当然也可能是后面的参数的问题,建议变参对应一定要细心,而打印字符串时,尽量使用”%.ns”的形式指定最大字符数。

忘记了第一个参数低级得不能再低级问题,用printf用得太惯了。//偶就常犯。:。(

变参对应出问题通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤其是对应”*”的那些参数,都提供了吗?不要把一个整数对应一个”%s”,编译器会觉得你欺她太甚了(编译器是obj和exe的妈妈,应该是个女的,:P)。

THE END
1.猫咪饲养猫咪疾病知识猫咪常见问题猫咪常见饲养问题、常见疾病诊断知识,宠颐生动物医院专家在线解答猫咪相关知识,让用户学习到专业的猫咪饲养知识及相关疾病预防知识!http://www.docpet.net/maomi.html
2.6种猫咪常见皮肤问题!逐一解决~超全图解!听说换季你们被猫咪皮肤问题搞得很头疼,不知道怎么分辨属于哪些问题,也不知道该怎么处理,更不知道该准备什么用品?抽(ao)空(ye)给大家画出了详细图解,从症状-原因-处理-必备用品都总结好了,逐一击破猫咪常见皮肤病,冲冲冲! . 1猫癣 圆形红色伤口,周边皮肤干燥呈鳞状,伴随猫咪抓挠舔舔,基本是猫藓没...https://m.dianping.com/ugcdetail/145613073?sceneType=0&bizType=29&msource=baiduappugc
3.猫咪知识百科:解答宠物猫常见问题,扩展猫咪知识库大家好!今天我要和大家分享一个猫咪知识百科,通过解答宠物猫常见问题,扩展我们的猫咪知识库。作为猫奴,我们都希望了解更多关于宠物猫的知识,以便更好地照顾它们并与它们建立深厚的关系。 首先,让我们来解答一些关于宠物猫的基本问题。猫咪是哺乳动物,属于猫科动物家族。它们通常有灵活的身体、锐利的爪子和敏锐的听力和...https://www.jianshu.com/p/af31b58b6849
4.新手养猫常见16个问题新手养猫实用攻略新手养猫常见16个问题:遇到猫咪乱尿,可以用苏打粉去除异味。猫窝有异味,可放一把干茶叶进去把异味去除。家里猫毛到处乱飞,将旧丝袜套在扫帚上,利用扫地时的静电将毛发吸附在丝袜上面。 新手养猫常见16个问题解答 猫尿在了沙发或者床上、地毯上怎么办? https://mip.xiaokeai.com/cat/feed/23792.html
5.猫咪的五种常见皮肤问题猫咪作为我们的宠物伙伴,常常会遭受一些皮肤问题的困扰。这些问题不仅会给猫咪带来不适,还会影响它们的生活质量。 在本文中,我们将介绍猫咪常见的五种皮肤问题,并提供一些建议和详细说明,帮助猫咪主人们更好地照顾他们的毛孩子。 皮肤干燥和脱屑 皮肤干燥和脱屑是猫咪常见的皮肤问题之一。干燥的皮肤会导致瘙痒和不适感...https://www.360doc.cn/article/18349536_1100735177.html
6.猫咪不舒服的常见表现5、流鼻涕。猫咪的呼吸道出现问题时通常会出现打喷嚏、流鼻涕、咳嗽、呼吸困难等呼吸道症状,如猫鼻支、感冒等,此外,猫咪吸入刺激性气体,鼻子不舒服时也可能会出现上述,如果猫咪出现上述症状,主人要注意检查猫咪是否存在身体不适的情况或者生病,及时给予其帮助。 https://www.isdpp.com/xq-13332.html
1.关于新生猫咪的一些常见问题养宠物猫技术方法宠物养殖关于新生猫咪的一些常见问题 新生的猫 不管是哪种动物,童年都是最需要关注的阶段。否则,护理不当可能会导致它生病甚至死亡,即使是新生的猫。刚出生的猫可能会遇到各种情况,不同的问题需要我们区别对待。所以准确处理新生猫咪的一些问题是非常重要的。 一、先天异常...https://www.wycfw.com/yangzhi/130609.html
2.猫咪的皮肤问题:了解常见皮肤疾病和护理方法猫咪的皮肤是其身体的第一道防线,也是反映其整体健康状况的重要指标。然而,猫咪常常面临各种皮肤问题,包括皮肤感染、过敏、寄生虫等。在本文中,我们将探讨常见的猫咪皮肤疾病,并分享一些护理方法,帮助您保护猫咪的皮肤健康。 1. 皮肤感染 皮肤感染是猫咪常见的皮肤问题之一,常由细菌或真菌感染引起。常见的症状包括红肿...https://www.boofb.com/a/25.html
3.遛猫常见问题答疑我写了一篇关于猫咪外出的文章,不过很多猫咪主人还是会这样那样的疑虑,我把一些经常被问到的问题列在下面,给大家进一步做一个答疑。如果你还有疑问,也可以评论提问。如果你想要遛猫,但猫咪很不适应,也可以来上遛猫课程。 Q:猫咪经常外出,是不是每次回来都要洗澡? https://www.douban.com/note/795561368/
4.养猫一课知识科普新手常见问题如何科学喂养看出猫咪病了训练方法...养猫第一课 养猫知识科普,新手养猫常见问题,如何科学喂养,如何看出猫咪生病了,猫咪的训练方法有哪些,看懂猫咪的身体语言https://8mob.com/item.htm?id=doRk5onInyyB3Mv2uy
5.猫有滴虫有什么症状白陶土抑制腹泻。 猫咪在腹泻过程中会一直拉稀,可以使用白陶土来抑制猫咪拉稀,并且有帮助猫咪把一些寄生虫排除体内的作用。 莫比新配合消炎。莫比新是一种消炎药,也是类似人类的阿莫西林,可以治疗猫咪的肠胃炎。 . 不再害怕猫咪常见问题 耳螨(属于猫与猫之间高度传染性疾病,不传染人) ...http://m.boqii.com/article/41369.html
6.猫咪品种(常见品种大全)爱宠网猫咪作为人类最受欢迎的宠物之一,一直以来都是人们生活中不可或缺的一部分。不同于狗狗的品种众多,猫咪的品种相对较少,但也有着各自独特的外貌、性格和习性。如果你正在寻找一只新的猫咪作为宠物,或者对猫咪品种感兴趣,那么这篇关于猫咪常见品种大全的文章将会为你提供有用的信息和引导。 https://www.lovepet.cn/a/zaixianwenda/qita/116100.html
7.猫咪常见病和预防方法)——口服药(常见有伊曲康唑/氟康唑/灰黄霉素)——涂抹药膏(克霉唑软膏/咪康唑软膏/托萘酯软膏/皮特芬喷剂,使用前记得谨遵医嘱)——药浴(酮康唑洗液/咪康唑洗液,保持1~2周,直至康复)——增加营养(感染猫藓的猫咪,多半抵抗力有些问题,需要增加营养,多煮一点鸡胸肉+胡萝卜)——多晒太阳(晒太阳保持通风,可以...https://www.ruiwen.com/ziliao/kepu/3302267.html