c语言中的sprintf函数?

c语言中的sprintf函数?,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12182476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存