VS2008中的_itoa_s使用说明

http://haixiang189.blog.163.com/blog/static/31647695201141135131234/

在C++的程序开发中,经常需要将不同基本类型的值进行转换,在VS2008中的VC项目中,如果直接用itoa这个函数,在编译的时候会有警告说让你用_itoa,然后你用_itoa的时候呢,它又有警告说要用_itoa_s这个函数才行。

_itoa_s和itoa是有区别的,_itoa_s(int ,char *,int ,int )有四个参数,比itoa的参数个数要多一些,_itoa_s函数的四个参数的意思分别是:
第一个参数是你要转换的整形变量
第二个参数是转换后存放结果的字符串指针
第三个参数是第一个参数的进制表示,如二进制,十进制,八进制,16进制这样的值。

这里有问题,第三个参数应该是字符长度

http://msdn.microsoft.com/en-us/library/0we9x30h(v=vs.80).aspx(参见msdn)

函数原型:

errno_t _itoa_s(
   int value,
   char *buffer,
   size_t sizeInCharacters,
   int radix 
);
第四个参数是转换后的字符串结果数的进制表示,如二进制,十进制,八进制,16进制这样的值,

   这是在VS中的方法,不过还是建议多用标准C++中的函数,这样如果存在代码移植的情况时,需要改动的就小很多了。然而在实际的应用当中,还是建议大家用sprintf这个函数,在VS中用这个函数会有警告,没关系,可以不理它,用它的好处时,将数字类型的值转为相用的字符串时,可以格式化,即不足位可以自动补0进行占位,而_itoa_s则不会自动进行补位,很多时侯我们是需要固定长度的字符串的,这种情况下_itoa_s就麻烦一些,需要自己另外去补齐,而sprintf这个函数恰恰能自动完成这个过程,例如要把254转为固定4个字符的16进制字符串:
char str[4];
memset(str,0,4);
sprintf(254,"%04X",str);
这样处理后,字符串str的值是00FE,前面的不足位自动补0进行占位。

你可能感兴趣的:(VS2008中的_itoa_s使用说明)