Sprintf函数的用法

合集下载

单片机c数字转换为字符串的方法

单片机c数字转换为字符串的方法

单片机c数字转换为字符串的方法单片机C语言中数字转换为字符串是一个常见的需求,特别是在需要将数字显示在LCD屏幕或者通过串口发送出去的时候。

在单片机中,通常使用sprintf函数来实现数字转换为字符串的操作。

下面我们来介绍一下在单片机C语言中如何使用sprintf函数进行数字转换为字符串的方法。

首先,sprintf函数是C语言中的一个标准库函数,它的作用是将格式化的数据写入字符串。

在单片机中,我们通常使用sprintf函数将数字转换为字符串。

其基本用法如下:c.char str[20]; // 定义一个足够大的字符数组来存放转换后的字符串。

int num = 123; // 需要转换的数字。

sprintf(str, "%d", num); // 将数字转换为字符串。

在上面的例子中,我们定义了一个足够大的字符数组str来存放转换后的字符串,然后使用sprintf函数将数字num转换为字符串并存放在str中。

其中,"%d"是格式化字符串,表示将整数转换为字符串。

除了整数之外,sprintf函数还可以将浮点数、十六进制数等转换为字符串。

例如,将浮点数转换为字符串的方法如下:c.char str[20];float num = 3.14;sprintf(str, "%f", num);需要注意的是,sprintf函数在单片机中可能会占用较多的内存空间,因此在使用时需要注意字符数组的大小,以避免内存溢出的问题。

总之,使用sprintf函数可以方便地将数字转换为字符串,从而实现在单片机中显示数字的需求。

希望本文能够帮助到大家理解单片机C语言中数字转换为字符串的方法。

sprintf用法

sprintf用法

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。

由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。

这也导致sprintf 比printf 有用得多。

sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数。

而它的精华,显然就在第二个参数:格式化字符串上。

printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。

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

如://把整数123 打印成一个字符串保存在s 中。

sprintf(s, "%d", 123); //产生"123"可以指定宽度,不足的左边补空格:sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"当然也可以左对齐:sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"也可以按照16 进制打印:sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。

sprintf用法

sprintf用法

sprintf用法(转)printf可能是许多程序员在开始学习C语言时接触到的第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf了解多吗?在将各种类型的数据构造成字符串时,sprintf的强大功能很少会让你失望。

由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。

这也导致sprintf比printf有用得多。

所以本文着重介绍sprintf,有时也穿插着用用pritnf。

sprintf是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数。

而它的精华,显然就在第二个参数:格式化字符串上。

printf和sprintf都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。

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

如://把整数123打印成一个字符串保存在s中。

sprintf(s, "%d", 123); //产生"123"可以指定宽度,不足的左边补空格:sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"当然也可以左对齐:sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"也可以按照16进制打印:sprintf(s, "%8x", 4567); //小写16进制,宽度占8个位置,右对齐sprintf(s, "%-8X", 4568); //大写16进制,宽度占8个位置,左对齐这样,一个整数的16进制字符串就很容易得到,但我们在打印16进制内容时,通常想要一种左边补0的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0就可以了。

sprintf函数使用说明

sprintf函数使用说明

返回值: 写入 buffer 中的字节数
参数说明:buffer →将要写入的缓存空间
format →格式控制字串
argument→要输出的参数
sprintf 将要输出的内容全部写入缓存 buffer。其中,buffer 中的内容全都变成字符(串)
count += spaintf(temp + count, "\tInteger:%d\n ",i);
count += spaintf(temp + count, "\tReal:%f\n ",f);
printf( "Example Output:\n%s\n ",temp);
int i = 35,count;
float f=3.14159;
count = spaintf(temp, "\tString:%s\n ",s);
count += spaintf(temp + count, "\tCharacter:%c\n ",c);
sprintf() 作用与 printf() 大致相同,除了一点:将输出内容写入缓存buffer,不再写入
标准输出装置stdout;
int sprintf(char *buffer, const char *format [, argument]…);
}
运行结果:
Example Output:
String:Example
Character:a
Integer:35
Real:3.14159
型了。因此可利用这一点,用 sprintf 做数字型到字符型的转换。

sprintf函数的用法

sprintf函数的用法

sprintf函数的⽤法说明1:该函数包含在stdio.h的头⽂件中,使⽤时需要加⼊:#include <stdio.h>说明2:sprintf与printf函数的区别:⼆者功能相似,但是sprintf函数打印到字符串中,⽽printf函数打印输出到屏幕上。

sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应⽤⼴泛。

说明3:sprintf函数的格式:int sprintf( char *buffer, const char *format [, argument,...] );除了前两个参数固定外,可选参数可以是任意个。

buffer是字符数组名;format是格式化字符串(像:"=%6.2f%#x%o",%与#合⽤时,⾃动在⼗六进制数前⾯加上0x)。

只要在printf中可以使⽤的格式化字符串,在 sprintf都可以使⽤。

其中的格式化字符串是此函数的精华。

说明4:可以控制精度char str[20];double f=14.309948;sprintf(str,"%6.2f",f);说明5:可以将多个数值数据连接起来。

char str[20];int a=20984,b=48090;sprintf(str,"=m",a,b);str[]="20984 48090"说明6:可以将多个字符串连接成字符串char str[20];char s1={'A','B','C'};char s2={'T','Y','x'};sprintf(str,"%.3s%.3s",s1,s2);说明7:可以动态指定,需要截取的字符数char s1={'A','B','C'};char s2={'T','Y','x'};sprintf(str,"%.*s%.*s",2,s1,3,s2);sprintf(s, "%*.*f", 10, 2, 3.1415926);说明8:可以打印出i的地址:sprintf(s, "%p", &i);相当于sprintf(s, "%0*x", 2 * sizeof(void *), &i);说明9:sprintf的返回值是字符数组中字符的个数,即字符串的长度,不⽤在调⽤strlen(s)求字符串的长度。

PHP之sprintf函数用法详解

PHP之sprintf函数用法详解

PHP之sprintf函数用法详解文章主要介绍了中sprintf函数用法,以实例形式详细分析了sprintf函数格式化输出的常见用法,具有一定的参考借鉴价值,需要的朋友可以参考下.本文实例讲述了PHP中sprintf函数的用法。

分享给大家供大家参考。

具体用法分析如下:sprintf()函数在php官方是说把字符串格式化输出了,本文就来给各位朋友介绍一下在学习sprintf()函数时的一些分享,希望能给大家带来帮助.PHP函数 sprintf() 函数官方定义为:sprintf():把格式化的字符串写入一个变量中语法为:sprintf(format,arg1,arg2,arg++);参数:format:必须,转换格式arg1 :必须,规定插入 format 字符串中第一个%符号处的参数arg1 :可选,规定插入 format 字符串中第二个%符号处的参数arg1++:可选,规定插入 format 字符串中第三、四等%符号处的参数参数format 的转换格式,以百分比符号(%)开始到转换字符结束,下面是有可能的format值.%% –返回百分比符号%b –二进制数%c –依照 ASCII 值的字符%d –带符号十进制数%e –可续计数法(比如 1.5e+3)%u –无符号十进制数%f –浮点数(local settings aware)%F –浮点数(not local settings aware)%o –八进制数%s –字符串%x –十六进制数(小写字母)%X –十六进制数(大写字母)下面是一些demo,代码如下:复制代码代码如下:// 1. %% :把 %% 替换成 %$str = '测试一下 %% 这个参数,会被替换成什么';echo sprintf($str);//返回结果:测试一下 % 这个参数,会被替换成什么(%%被替换成一个%)// 2. %b :该参数只能替换整型数据,如果是浮点型,只会取整数部分,会忽略小数点后面的数据。

sprintf

sprintf
sprintf
字符串格式化命令
01 函数语法
03 常见问题
目录
02 说明及应用
sprintf指的是字符串格式化命令,函数声明为 int sprintf(char *string, char *format [,argument,...]);,主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string所指向的字 符串。sprintf是个变参函数。使用sprintf对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的 可能性。解决这个问题,可以考虑使用 snprintf函数,该函数可对写入字符数做出限制。
函数语法Biblioteka 功能 函数声明返回值
int sprintf(char *string, char *format [,argument,...]);
把格式化的数据写入某个字符串缓冲区。
如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
sprintf返回以format为格式argument为内容组成的结果被写入string的字节数,结束字符‘\0’不计入内。 即,如果“Hello”被写入空间足够大的string后,函数sprintf返回5。
忘记了第一个参数
低级得不能再低级问题,用printf用得太惯了。
变参对应出问题
通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤其是对应”*”的那些 参数,都提供了吗?不要把一个整数对应一个”%s”,编译器会觉得你欺她太甚了。
谢谢观看
说明及应用
例子 输出结果: Output: String: computer Character: l Integer: 35 Real: 1.732053 character count = 79 format标签属性 format标签属性是%[flags][width][.precision][length]specifier,具体讲解如下: sprintf格式的规格如下所示。中的部分是可选的。

c语言sprintf函数用法

c语言sprintf函数用法

c语言sprintf函数用法sprintf函数是C语言中的一个强大函数,该函数可以将格式化的数据写入一个字符串中,使得我们可以将各种类型的数据转换成字符串供我们使用。

它的声明如下:```cint sprintf(char *str, const char *format, ...)```sprintf函数的参数解释:- str:要写入的字符串的指针;- format:格式控制字符串,用于指定写入到字符串中的内容;-...:可选参数,用于填充格式控制字符串中的占位符。

sprintf函数的返回值是写入到字符串中的字符数,但不包括字符串的结尾符`\0`。

下面是几个sprintf函数的使用示例:1.将整数转换成字符串:```c#include <stdio.h>int maiint num = 123;char str[10];sprintf(str, "%d", num);printf("%s\n", str); // 输出:123 return 0;```2.将浮点数转换成字符串:```c#include <stdio.h>int maifloat num = 3.14;char str[10];sprintf(str, "%.2f", num);printf("%s\n", str); // 输出:3.14 return 0;```3.将多个数据项转换成字符串:```c#include <stdio.h>int maiint num1 = 123;float num2 = 3.14;char str[20];sprintf(str, "%d %.2f", num1, num2);printf("%s\n", str); // 输出:123 3.14return 0;```4.格式化字符串:```c#include <stdio.h>int maichar name[] = "John";int age = 20;char str[20];sprintf(str, "My name is %s and I am %d years old.", name, age);printf("%s\n", str); // 输出:My name is John and I am 20 years old.return 0;```需要注意的是,在使用sprintf函数时,要保证目标字符串的长度足够大,以容纳格式化后的结果,以免造成内存越界的错误。

c语言sprintf函数用法

c语言sprintf函数用法

c语言sprintf函数用法
sprintf(dest_str, format [, argument1, argument2, …])函数用
于把格式化的数据写入某个字符串中。

(1)dest_str用于存储拼接的字符串,必须为字符型的指针;
(2)format参数为指定的格式,其中需要sprintf函数来处理的元
素用格式说明符来表示,它是一种特殊形式的字符串,通常由字符、标识
符和格式
控制符组成;
(3)argument1,argument2,…参数用来指出格式说明符期望被替换
的变量,这些变量的值将被格式化后写入dest_str中。

sprintf函数的主要功能是可以把任意类型的变量转换为一个“可打
印的”字符串,比如将int,float等转换为可打印字符串。

它有个很重要
的参数,就是格式化字符串,用于指出如何把变量转换成可打印的字符串。

sprintf函数要求格式化字符串必须以null字符('\0')结尾。

使用sprintf函数要注意几点:
(1)函数返回值是写入字符串的字符数,而不是字符串本身;
(2)字符串会按照指定的格式被写入;
(3)未被格式化的部分将被原样输出;
(4)屏蔽字符(null字符)和格式控制字符将被忽略;
(5)如果dest_str指向的字符数组小于所需要的字符串空间,那么
只有部分内容会被拷贝到dest_str;
(6)字符串会以null字符('\0')结尾。

sprintf函数用法详解例子

sprintf函数用法详解例子

.sprintf函数的功能是把格式化的数据写入某个字符串缓冲区。

int sprintf( char *buffer, const char *format, [ argument] …); buffer:char型指针,指向将要写入的字符串的缓冲区。

format:格式化字符串。

[argument]...:可选参数,可以是任何类型的数据。

..示例int main() { char buffer[50];//大小50的char字符数组int n,a=5,b=3;// n=sprintf(buffer,"%d?+?%d?=?%d",a,b,a+b);//把a,b,a+b以第二个参数的形式写入buffer printf("[%s]is?a?string?%d?chars?long\n",buffer,n);/*“格式输出函数”*/ return 0; }输出结果[5 + 3 = 8] is a string 13 chars long..3.sprintf格式的规格如下所示。

[]中的部分是可选的。

%[指定参数][标识符][宽度][.精度]指示符若想输出'%'本身时, 请使用'%%'处理。

1. 处理字符方向。

负号时表示从后向前处理。

2. 填空字元。

0 的话表示空格填0;空格是内定值,表示空格就放着。

3.?字符总宽度。

为最小宽度。

4. 精确度。

指在小数点后的浮点数位数。

..4.转换字符%% 印出百分比符号,不转换。

%c 整数转成对应的ASCII 字元。

%d 整数转成十进位。

%f 倍精确度数字转成浮点数。

%o 整数转成八进位。

%s 整数转成字符串。

%x 整数转成小写十六进位。

%X 整数转成大写十六进位。

.。

snprintf函数用法详解

snprintf函数用法详解

snprintf函数用法详解首先,sprintf函数是C语言中的一个库函数,其功能是格式化输出并将结果存储于字符串中。

函数原型为 "int sprintf( char *buffer, const char * format, ... );"。

在sprintf函数中,buffer是指针,用于存储格式化后的字符串。

format则表示格式化字符串。

随后的三个点表示函数可以接收不定数量的参数。

这些参数需要与格式化字符串中的转换说明符匹配。

对于sprintf函数中的格式化字符串,它是由转换说明(可选标志、可选最小字段宽度、可选精度、可选长度修饰符、必需的转换字符)组成的。

标志包括“-”,表示左对齐;“+”,表示总是在数值前面加符号;“空格”,表示正数前面保留空格;“0”,表示用0填充空格;“#”,表示在八进制数前面保留0,在十六进制数前面保留0x。

在转换字符中,“d”或“i”表示输出十进制整数,“o”用于八进制,"x"或"X"用于十六进制,"f"或"F"表示输出浮点型,"c"表示输出字符,"s"输出字符串,"p"表示输出指针地址等。

我们可以通过转换字符来改变输出结果的类型。

例如,以下代码 "intsprintf(buffer,"%d",123);" 将把123作为十进制数字转换为字符串,并保存在buffer指向的内存中。

需要注意的是,sprintf函数返回值是写入的字符数,不包括结尾的'\0'。

此外,sprintf函数不能防止缓冲区溢出,如果输出字符串超过了buffer的大小,就可能导致内存错误。

最后,sprintf函数不仅可以用于基本数据类型的格式化输出,也可用于结构体,甚至是自定义数据类型。

sprintf

sprintf

sprintfsprintf 将字串格式化。

在头文件#include<stdio.h>中语法: int sprintf(string format, mixed [args]...);返回值:字符串长度(strlen)1. 处理字符方向。

-负号时表时从后向前处理。

2. 填空字元。

0 的话表示空格填0;空格是内定值,表示空格就放着。

3. 字符总宽度。

为最小宽度。

4. 精确度。

指在小数点后的浮点数位数。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-转换字符=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-% 印出百分比符号,不转换。

b 整数转成二进位。

c 整数转成对应的ASCII 字元。

d 整数转成十进位。

f 倍精确度数字转成浮点数。

o 整数转成八进位。

s 整数转成字串。

x 整数转成小写十六进位。

X 整数转成大写十六进位。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-<?$money = 123.1$formatted = sprintf ("%06.2f", $money); // 此时变数$ formatted 值为"123.10"$formatted = sprintf ("%08.2f", $money); // 此时变数$ formatted 值为"00123.10"$formatted = sprintf ("%-08.2f", $money); // 此时变数$ formatted 值为"123.1000"$formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比?>¢%08.2f 解释:%开始符0是"填空字元" 表示,如果长度不足时就用0来填满。

[CC++基础]C语言常用函数sprintf和snprintf的使用方法

[CC++基础]C语言常用函数sprintf和snprintf的使用方法

[CC++基础]C语⾔常⽤函数sprintf和snprintf的使⽤⽅法
Sprintf
函数声明:int sprintf(char *buffer, const char *format [, argument1, argument2, …])
⽤途:将⼀段数据写⼊以地址buffer开始的字符串缓冲区
所属库⽂件: <stdio.h>
参数:(1)buffer,将要写⼊数据的起始地址;(2)format,写⼊数据的格式;(3)argument:要写的数据,可以是任何格式的。

返回值:实际写⼊的字符串长度
说明:此函数需要注意缓冲区buffer溢出,要为写⼊的argument留⾜长度,可以⽤来代替itoa,即把整数转化为字符串。

Snprintf
函数声明:int snprintf(char *str, size_t size, const char *format, …)
⽤途:sprintf的安全模式,⽐sprintf多⼀个参数size。

将⼀段数据写⼊以地址str开始的字符串缓冲区。

字符串长度最⼤不超过长度size。

如果超过或等于,则只写⼊size-1个,后⾯补个'\0'。

所属库⽂件:<stdio.h>
参数:(1)str,将要写⼊数据的起始地址;(2)size,写⼊数据的最⼤长度(实际写⼊肯定⼩于等于此值,包括'\0');(3)format,写⼊数据的格式;(4)argument(省略号),要写的数据
例如:
运⾏后结果为
需要注意的是,snprintf返回值是format过后字符串的长度,并不是实际拷进字符串缓冲区的长度。

sprintf函数的用法

sprintf函数的用法

sprintf函数的用法Sprint函数是C语言中最常用的字符串格式化函数,它把可变个参数列表中的参数格式化输出到指定字符串中。

它主要有以下四种形式:1、sprintf(string,format[,argument]…string:字符串指针,指向用于存储格式化字符串的字符数组;格式format:控制输出格式的字符串常量,其中包含了一些转换说明符;argument:可以有一个或多个可变参数,它们将按照format字符串中的说明符格式化,然后加入到字符串string中。

2、sprintf_s(string,numberOfElements,format[,argument]… string:字符串指针,指向用于存储格式化字符串的字符数组; numberOfElements:表示string指向的字符数组的最大长度;格式format:控制输出格式的字符串常量,其中包含了一些转换说明符;argument:可以有一个或多个可变参数,它们将按照format字符串中的说明符格式化,然后加入到字符串string中。

3、sprintf_s_l(string,numberOfElements,locale,format[,argument ]…string:字符串指针,指向用于存储格式化字符串的字符数组; numberOfElements:表示string指向的字符数组的最大长度;locale:指定用于格式化输出的区域设置;格式format:控制输出格式的字符串常量,其中包含了一些转换说明符;argument:可以有一个或多个可变参数,它们将按照format字符串中的说明符格式化,然后加入到字符串string中。

4、vsprintf(string,format[,argument]…string:字符串指针,指向用于存储格式化字符串的字符数组;格式format:控制输出格式的字符串常量,其中包含了一些转换说明符;argument:可以有一个或多个可变参数,它们将按照format字符串中的说明符格式化,然后加入到字符串string中。

sprintf函数用法

sprintf函数用法

sprintf() 格式化输出函数(图形)功能:函数sprintf()用来作格式化的输出。

用法:此函数调用方式为int sprintf(char *string,char *format,arg_list);说明:函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串里的字符显示在屏幕上。

arg_list为参数表,可有不定个数。

通常在绘图方式下输出数字时可调用sprintf()函数将所要输出的格式送到第一个参数,然后显示输出。

函数名: sprintf功能: 送格式化输出到字符串中用法: int sprintf(char *string, char *farmat [,argument,...]);程序例:#include#includeint main(void){char buffer[80];sprintf(buffer, "An approximation of Pi is %f\n", M_PI);puts(buffer);return 0;}sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。

sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现 "该程序产生非法操作,即将被关闭...."的提示。

因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。

即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。

所以一定要在调用sprintf之前分配足够大的空间给buf。

由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。

这也导致sprintf 比printf 有用得多。

关于php的sprintf函数的用法控制浮点数格式

关于php的sprintf函数的用法控制浮点数格式

关于php的sprintf函数的用法控制浮点数格式
控制浮点数打印格式
浮点数的打印和格式控制是sprintf的一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后6位数字,比如:复制代码代码如下:
sprintf("%f",3.1415926);//结果:"3.141593"
但,有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m表示打印数字的整体宽度,n表示小数点后的位数。

比如:
复制代码代码如下:
sprintf("%9.3f",3.1415926);//右对齐:位数不够用空格补全。

结果:"3.142"
sprintf("%-9.3f",3.1415926);//左对齐:位数不够用空格补全。

结果:"3.142"
sprintf("%.3f",3.1415926);//不指定总宽度,结果:"3.142"
注意一个问题
复制代码代码如下:
$num=100;
sprintf("%.2f",$num);
sprintf("%.2f",(double)$num);
上面的两个结果真的一样吗?虽然看起来是一样的,但是下面的原因,可能会有所启发.
原因是:参数压栈时调用者并不知道跟num相对应的格式控制符是个”%f”。

而函数执行时函数本身则并不知道当年被压入栈里的是个整数,于是可怜的保存整数$num的那4个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。

sprintf函数

sprintf函数

sprintf函数sprintf函数是C语言中的一个重要的函数,它可以将格式化的字符串及数据储存在指定的内存空间中,它的功能强大、功能十分的实用。

本文将介绍其原理及用法,帮助读者更好的理解认识sprintf 函数。

sprintf函数其实是C中的一个格式化输出函数,它主要用来处理C语言字符串操作,是一个函数库函数,可以实现将字符串、数字、字符和结构体数据根据一定的格式,输出到一个缓冲区或者字符串中去。

sprintf函数的语法如下:int sprintf(char *str, const char *format, ...);其中str是传出参数,指向字符型指针,用于保存格式化字符串;format是传入参数,是指定格式化字符串,此参数的类型为const char;而点号后的参数与format参数不同,它是变量参数,用于将格式化字符串中的每一个格式化符号对应替换成对应类型的内容。

sprintf函数返回值是写入字符串str中的字节数,也就是写入字符串的长度。

sprintf函数的格式化控制主要采用的是sprintf函数的格式化符号,它们可以控制输出的格式,如控制字符的宽度,控制数据的形式,控制前缀等。

常使用的格式化控制如下:%d:表示允许整数参数;%ld:表示允许长整数参数;%f:表示允许浮点数参数;%s:表示允许字符串参数;%c:表示允许字符参数;%x:表示允许16进制整数参数;除此之外,sprintf函数还允许程序员使用定界符,即增加补充格式化控制符,该格式为“%[flags][width][.precision]specifier”,其中flags表示格式化控制参数,width表示宽度,precision表示精度,specifier表示数据类型。

sprintf函数的实例一般如下所示。

int ret;char buf[50];ret = sprintf(buf, 这是一个整数 %d,这是一个字符串 %s。

sprintf函数

sprintf函数

sprintf函数sprintf函数是C/C++中一种常用的输出函数,它的主要功能是将格式化的数据以字符串的形式存储在指定的字符串变量中。

它可以用于将数字、字符串、字符等格式化输出到字符串缓冲区中。

sprintf函数的函数原型如下所示:int sprintf(char * str,const char * format,...);函数的参数str是字符指针,指向一个字符数组,用来存放格式化后的字符串。

format参数指定了输出格式,可以通过它格式化输出,其后的...表示format字符串中指定的参数。

sprintf函数实质上是一个格式化输出函数,可以在程序中将一系列字符、数字等元素,根据指定的格式,格式化输出到内存中的一个字符数组中。

举个例子,假定有如下变量:int i=1;float f=1; char str[]=hello world“; sprintf(buf,“i=%d,f=%f,str=%s n”,i,f,str);这段代码将变量i,f和str格式化输出到buf字符数组中,字符串格式为“i=1,f=1.000000,str=hello world n”。

由于sprintf函数可以将一系列数据格式化输出到字符数组中,因此常常被应用到日志输出和程序报错信息中。

sprintf函数还有一个重载形式:int sprintf(char * str,const char * format,va_list arg);通过这种重载形式,可以将可变参数传递到函数中,实现可变参数的格式化输出。

需要注意的是,sprintf函数一般不检查字符数组str是否会溢出,因此程序员应该在使用sprintf函数时充分考虑这个问题,以免程序出现未知错误或数据溢出。

另外,在Windows系统中,还有一个实现类似功能的函数:int wsprintf(char * str,const wchar_t * format,...);它的功能与sprintf函数类似,但其输出的字符串是Unicode编码的字符串,因此在Windows环境中使用更加方便。

sprintf用法

sprintf用法

sprintf用法sprintf是C言中实现格式化字符串的函数,它可以把输入参数格式化为输出字符串,其原型如下:int sprintf (char *string, const char *format, ...);该函数把可变个参数按照 format指定的格式转换成字符串,并把结果存储到 string指向的字符串缓冲区中。

该函数返回转换结果字符串的长度,不包括结尾的“/0”。

如果格式化出现错误,返回值 -1,string 不会改变。

sprintf()数的定义参数格式如下:string:表示存储转换结果字符串的缓冲区;format:表示输出格式;...:表示不定参数,其形式为(type1 arg1, type2 arg2, ...),其中 type1想要转换格式参数1的类型,arg1参数1的值,type2想要转换格式参数2的类型,arg2参数2的值,以此类推。

sprintf()数的功能主要是根据格式化字符串及转换参数,把输入参数按照指定的格式转换成字符串,然后把结果字符串输出到字符串缓冲区 string 中。

sprintf()数的格式字符串由一个或多个格式转换说明符组成,要想输出跟格式说明符相匹配的参数,就得在格式说明符后加上相应的参数值,如果格式说明符和参数类型不匹配,就会出现不可预料的错误结果。

sprintf()数的参数处理是按照先进先出的原则指定的,即先指定的参数,输出后跟的先指定的参数,从而依次输出所有指定的格式化参数。

sprintf()数除了将可变参数按照指定格式转换成字符串外,还可以把字符串按照指定格式转换成整数,浮点数等格式,也可以将字符串转换成其它类型。

另外,sprintf()数还可以实现一些特殊的字符串处理操作,比如将字符串中的某个字符替换成另一个字符,将字符串反转等操作,大大方便了程序的开发。

总的来说,sprintf()数可以把可变参数按照指定的格式转换成一个字符串,它是一个非常实用的函数,不仅可以用来格式化字符串,还可以用来格式化其它类型的变量,它可以大大提高程序员的开发效率,是程序开发过程中不可或缺的一个函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Sprintf函数的用法:函数简介:函数功能:把格式化的数据写入某个字符串头文件:stdio.h函数原型:int sprintf( char *buffer, const char *format, [ argument] … ) ;返回值:字符串长度(strlen)sprintf格式的规格如下所示。

[]中的部分是可选的。

%[指定参数][标识符][宽度][.精度]指示符若想输出`%'本身时, 请这样`%%'处理。

1. 处理字符方向。

负号时表示从后向前处理。

2. 填空字元。

0 的话表示空格填0;空格是内定值,表示空格就放着。

3. 字符总宽度。

为最小宽度。

4. 精确度。

指在小数点后的浮点数位数。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-转换字符=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-%% 印出百分比符号,不转换。

%c 整数转成对应的ASCII 字元。

%d 整数转成十进位。

%f 倍精确度数字转成浮点数。

%o 整数转成八进位。

%s 整数转成字符串。

%x 整数转成小写十六进位。

%X 整数转成大写十六进位。

我们的用法:Uchar sf[20],sd[20];d=124;a = sprintf(sf,"%.0f",d); // Long(Int) 到char字符串d=12422.422;a = sprintf(sd,"%f",d); // float 到char字符串a = sprintf(sd,"%.6f",d); // float 到char字符串这两句相等;即浮点型转换时,小数位不指定情况下为最大6位;注意:以防sd缓冲区溢出,待转换数据先做判断,大于0xFFFFFFFF4.打印地址信息有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:sprintf(s, "%u", &i);不过通常人们还是喜欢使用16进制而不是10进制来显示一个地址:sprintf(s, "%08X", &i);然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:sprintf(s, "%p", &i);我觉得它实际上就相当于:sprintf(s, "%0*x", 2 * sizeof(void *), &i);5.利用sprintf的返回值较少有人注意printf/sprintf函数的返回值,但有时它却是有用的,spritnf返回了本次函数调用最终打印到字符缓冲区中的字符数目。

也就是说每当一次spr inf调用结束以后,你无须再调用一次strlen便已经知道了结果字符串的长度。

如:int len = sprintf(s, "%d", i);对于正整数来说,len便等于整数i的10进制位数。

下面的是个完整的例子,产生10个[0, 100)之间的随机数,并将他们打印到一个字符数组s中,以逗号分隔开。

#include <stdio.h>#include <time.h>#include <stdlib.h>int main() {srand(time(0));char s[64];int offset = 0;for(int i = 0; i < 10; i++) {offset += sprintf(s + offset, "%d,", rand() % 100);}s[offset - 1] = '\n';//将最后一个逗号换成换行符。

printf(s);return 0;}设想当你从数据库中取出一条记录,然后希望把他们的各个字段按照某种规则连接成一个字符串时,就可以使用这种方法,从理论上讲,他应该比不断的strcat效率高,因为strcat每次调用都需要先找到最后的那个’\0’的位置,而在上面给出的例子中,我们每次都利用sprintf返回值把这个位置直接记下来了。

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

Ø缓冲区溢出第一个参数的长度太短了,没的说,给个大点的地方吧。

当然也可能是后面的参数的问题,建议变参对应一定要细心,而打印字符串时,尽量使用”%.ns”的形式指定最大字符数。

Ø忘记了第一个参数低级得不能再低级问题,用printf用得太惯了。

//偶就常犯。

:。

(Ø变参对应出问题通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。

尤其是对应”*”的那些参数,都提供了吗?不要把一个整数对应一个”%s”,编译器会觉得你欺她太甚了(编译器是obj和exe的妈妈,应该是个女的,:P)。

7.strftimesprintf还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为了在出现问题时可以推卸责任吧。

这里举个例子:time_t t = time(0);//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。

char s[32];strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));sprintf在MFC中也能找到他的知音:CString::Format,strftime在MFC中自然也有她的同道:CTime::Format,这一对由于从面向对象哪里得到了赞助,用以写出的代码更觉优雅。

8.后记本文介绍的所有这些功能,在MSDN中都可以很容易地查到,笔者只是根据自己的使用经验,结合一些例子,把一些常用的,有用的,而可能为许多初学者所不知的用法介绍了一点,希望大家不要笑话,也希望大家批评指正。

有人认为这种带变参的函数会引起各种问题,因而不提倡使用。

但笔者本人每每还是抵挡不了它们强大功能的诱惑,在实际工作中一直在使用。

实际上,C #.NET从开始就支持变参,刚发布不久的Java5.0也支持变参了。

感谢ericzhangali(另一个空间)仔细审阅了全稿,纠正了很多小错误,并提出了一些建议。

也感谢laomai(老迈)阅读了全稿并给出了增删一些内容的建议。

①获取System时间: void GetSystemTime(LPSYSTEMTIME lpSystemTime); 下面是例子:#include <windows.h>#include <stdio.h>#include <stdlib.h>void main() {SYSTEMTIME st; //定义存放时间的结构体char strTime[256];int n=0;GetSystemTime(&st);n = sprintf(strTime,"Year:\t%d\n",st.wYear);n += sprintf(strTime+n,"Month:\t%d\n",st.wMonth);n += sprintf(strTime+n,"Day:\t%d\n",st.wDay);n += sprintf(strTime+n,"Date:\t%d\n",st.wDayOfWeek);n += sprintf(strTime+n,"Hour:\t%d\n",st.wHour);n += sprintf(strTime+n,"Minute:\t%d\n",st.wMinute);n += sprintf(strTime+n,"Second:\t%d\n",st.wSecond);n += sprintf(strTime+n,"MilliSecond:\t%d\n",st.wMilliseconds);printf("%s",strTime);system("pause");}******************************************参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。

1. 格式化规定符Turbo C2.0提供的格式化规定符如下:━━━━━━━━━━━━━━━━━━━━━━━━━━符号作用──────────────────────────%d 十进制有符号整数%u 十进制无符号整数%f 浮点数%s 字符串%c 单个字符%p 指针的值%e 指数形式的浮点数%x, %X 无符号以十六进制表示的整数%0 无符号以八进制表示的整数%g 自动选择合适的表示法━━━━━━━━━━━━━━━━━━━━━━━━━━说明:(1). 可以在"%"和字母之间插进数字表示最大场宽。

例如: %3d 表示输出3位整型数, 不够3位右对齐。

%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6, 小数点占一位, 不够9位右对齐。

%8s 表示输出8个字符的字符串, 不够8个字符右对齐。

如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。

但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出; 若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。

另外, 若想在输出值前加一些0, 就应在场宽项前加个0。

例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度为4位。

如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度, 小数点前的数字代表最小宽度。

例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。

若大于9, 则第9个字符以后的内容将被删除。

(2). 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。

相关文档
最新文档