在操作字符串的时候,经常会遇到int转换成char类型的情况,经常会使用itoa函数,但是这个函数不是标准的C函数,不是所有的平台都认识它。
char *itoa(int value, char *string, int radix);参数第一个是数字,第二个是字符串,第三个是类型,二进制、八进制还是十进制。
遇到跨平台的情况,可以使用sprintf,定义如下:
int sprintf(char *buffer, const char*format [,argument] ...);
其中,buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。[argument]...:可选参数,可以是任何类型的数据。返回值是字符串长度(strlen)。
...表示
其最常用的地方是格式化字符输出,如下所示:
sprintf(s,"%d",123);
sprintf(s,"%d***%d",m,n);
使用起来比较方便,但格式要严格点,还有这个函数是不安全的。如果用安全的,可以用sprintf_s,如下
int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format [,argument] ...);
sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险。经典例子如下所示:
#include <stdio.h>
int main( void )
{
char buffer[200], s[] = "computer", c = 'l';
int i = 35, j;
float fp = 1.7320534f;
// Format and print various data:
j = sprintf_s( buffer, 200, " String: %s\n", s );
j += sprintf_s( buffer + j, 200 - j, " Character: %c\n", c );
j += sprintf_s( buffer + j, 200 - j, " Integer: %d\n", i );
j += sprintf_s( buffer + j, 200 - j, " Real: %f\n", fp );
printf_s( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
常用转换字符
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。