1
sprintf
是个变参函数,定义如下:
int
sprintf(
char
buffer,
const
char
format
[,
argument]
);
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。
2
sprintf
使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format
specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。
3
sprintf
最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf
在大多数场合可以替代itoa。
sprintf函数的作用是格式化一个字符串,和printf函数有些类似,不同的是printf函数是格式化输出流,而sprintf是格式化字符串。sprintf函数的第一个参数就是指向一个用于存放结果的字符串,第二个参数就和printf函数一样,由普通字符串和格式转换控制符组成。转换控制符就是:%d对应整型、%c对应一个字符、%f对应一个单精度浮点数、%s对应一个字符串。sprintf会把按照第二个参数格式化好的字符串放到第一个参数中,所以第一个参数要有足够的长度容纳。
添加头文件#include <stdioh>
sprintf()函数和printf()类似, 只是把输出发送到buffer(缓冲区)中返回值是写入的字符数量 例如:
char string[50]; int file_number = 0; sprintf( string, "file%d", file_number ); file_number++; output_file = fopen( string, "w" );
sprintf函数的格式:
int sprintf( char buffer, const char format [, argument,] );
除了前两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串(像:"=%62f%#x%o",%与#合用时,自动在十六进制数前面加上0x)。只要在printf中可以使用的格式化字符串,在sprintf都可以使用。其中的格式化字符串是此函数的精华。
例char str[20];
double f=14309948;
sprintf(str,"%62f",f)
1 保证目标缓冲区长度够用
2 格式串和后边的参数一定要对应, 个数和类型都必须相同
3 使用"%s"时更要加倍小心, 限制转换长度是个可行的方法, 如: "%100s"
4 用snprintf代替sprintf, 要安全一些
直接复制的在那一句最后边多了两个字符
去掉后编译无错
请检查你是否输入错误,没有错误的话请更换最新版keil C51。
还有就是51对浮点型的运算是调用库执行的,效率很低,建议优化,还有sprintf函数虽然使用方便,但是编译后占用2k空间,对51这种flash不大的单片机来说比较浪费,建议尽量不用,自己写的会比调用这个函数占用的资源小很多。
函数原型:
int sprintf_s(
char buffer,
size_t sizeOfBuffer,
const char format [,
argument]
);
sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险
相关函数:
int sprintf( char buffer, const char format [, argument] … );
int vsprintf( char buffer, const char format, va_list argptr );
int _sprintf_s_l(
char buffer,
size_t sizeOfBuffer,
const char format,
locale_t locale [,
argument]
);
int swprintf_s(
wchar_t buffer,
size_t sizeOfBuffer,
const wchar_t format [,
argument]
);
int _swprintf_s_l(
wchar_t buffer,
size_t sizeOfBuffer,
const wchar_t format,
locale_t locale [,
argument]…
);
template <size_t size>
int sprintf_s(
char (&buffer)[size],
const char format [,
argument]
); // C++ only
template <size_t size>
int swprintf_s(
wchar_t (&buffer)[size],
const wchar_t format [,
argument]
); // C++ only
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)