请问sprintf(s, "%.8X", 4567);是否自动补0从而产生:"000011D7”呢?
1. 保证目标缓冲区长度够用
2. 格式串和后边的参数一定要对应, 个数和类型都必须相同
3. 使用"%s"时更要加倍小心, 限制转换长度是个可行的方法, 如: "%.100s"
4. 用snprintf代替sprintf, 要安全一些
在c语言中sprintf()函数的用法如下:
1、该函数包含在stdio.h的头文件中。
2、sprintf和平时我们常用的printf函数的功能很相似。sprintf函数打印到字符串中(要注意字符串的长度要足够容纳打印的内容,否则会出现内存溢出),而printf函数打印输出到屏幕上。sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。
3、sprintf函数的格式:
除了前两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串(像:”%3d%6.2f%#x%o”,%与#合用时,自动在十六进制数前面加上0x)。只要在printf中可以使用的格式化字符串,在sprintf都可以使用。
4、可以控制精度
精度由其中“56.2f”决定,可根据自己需求更改。
5、可以将多个数值数据连接起来
6、可以将多个字符串连接成字符串
%m.n在字符串的输出中,m表示宽度,字符串共占的列数;n表示实际的字符数。%m.n在浮点数中,m也表示宽度;n表示小数的位数。
7、可以动态指定,需要截取的字符数
8、可以打印出i的地址
上面的语句相当于
9、sprintf的返回值是字符数组中字符的个数,即字符串的长度,不用在调用strlen(str)求字符串的长度。
扩展资料:
sprintf指的是字符串格式化命令,函数声明为 int sprintf(char *string, char *format [,argument,...]);,主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。解决这个问题,可以考虑使用 snprintf函数,该函数可对写入字符数做出限制。
参考资料:
sprintf()函数—百度百科
%X之间无论加什么前缀,都表示将输出大写的无符号十六进制数。
%x为小写无符号16进制数。
--------------------
%08X表示将对应变量转换为16进制无符号数之后如果目标数字不满8位,则在其左侧补0以填满8位,然后输出。
%.8X表示将对应变量转换为16进制无符号小数,其中整数位未指定,小数位为8位,然后输出。
然而,计算机实际表示的16进制数不存在小数点(所谓的浮点数也不过是事先约定了整数和小数分别占的位数),因此%x和%X理论上不应该写成含指定小数位的形式。
虽然编译器能给出正确结果,但我个人认为这仍然属于错误写法。指定小数的形式应该仅用于各种(单、双精度)浮点数的显示(连整数这样写都应该被认为是错误的)。
-------------------
printf的对应写法应为:
printf("%08X",4567);
它比sprintf少一个参数。
---------------
MSDN原文:
The second optional field of the format specification is the width specification. The width argument is a nonnegative decimal integer controlling the minimum number of characters printed. If the number of characters in the output value is less than the specified width, blanks are added to the left or the right of the values — depending on whether the – flag (for left alignment) is specified — until the minimum width is reached. If width is prefixed with 0, zeros are added until the minimum width is reached (not useful for left-aligned numbers).
The width specification never causes a value to be truncated. If the number of characters in the output value is greater than the specified width, or if width is not given, all characters of the value are printed (subject to the precision specification).
If the width specification is an asterisk (*), an int argument from the argument list supplies the value. The width argument must precede the value being formatted in the argument list. A nonexistent or small field width does not cause the truncation of a field; if the result of a conversion is wider than the field width, the field expands to contain the conversion result.
See Also
Concepts
printf, _printf_l, wprintf, _wprintf_l
不一样
一个是浮点一个是整数
我是这么认为的 你可以输出一下试试被
sprintf函数的问题 sprintf( aa, "%*s", 100, 30 ); 问题:中间那个%*S...
而不是静态指定的,因为许多时候,程序要到运行时才会清楚到底需要取字符数组中的几个字符,这种动态的宽度\/精度设置功能在sprintf 的实现中也被考虑到了,sprintf 采用”*”来占用一个本来需要一个指定宽度或精度的常数数字的位置,同样,
请教sprintf()函数的应用问题
s 的s 是string 的意思,就是这里输出的应当是一个字符串型的变量。sendbuf 里面存储的就是后面那一段文字。这个函数就是格式化一段字符串,放入一个数组中
关于sprintf的问题
sprintf( a , "abcd%s", a ); 首先把''abcd'写入a,将a变为abcd\\0,再从a的第五位开始从a中读取并写入字符,读取的字符数是一开始a的长度,即"filename"的长度。第5位为现在a中的第一位即a,所以得到abcda,以此类推,得到abcdabcdabcd.
C语言编程:sprintf(chr,"%s",a[1]);字符数组输出的问题
sprintf(chr,"%s",a);才正确。2、sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, argument] ... );除了前两个参数类...
sprintf使用sprintf 的常见问题
Sprintf是一个变参函数,使用时常出现内存访问问题,导致程序崩溃。好在这些问题通常易于发现,主要就是几种常见情况,仔细检查代码通常就能发现问题。例如,如果第一个参数的长度过短,可能会导致缓冲区溢出,解决方法是增大缓冲区空间。同时,确保变参与格式符一一对应,特别是与"*"相关的参数,避免类型错误...
使用sprintf()函数的一个问题?
首先说说sprintf函数吧,这个函数的功能是将某一个字符串放在目标字符串后面输出,可以理解成将两个字符串连接在一起输出。你写的程序内存越界是因为char brray[4];sprintf(brray,"%30.3f", 3.14);的问题,你定义了一个含有四个成员的字符数组,而你在数组后面接上的"%30.3f"格式的一个浮点型...
c语言问题:重点解释:sprintf(str1,"%-s%0*d",str2,sizeof(str1)-str...
-s -号表示左对齐,s表示输出字符串,不过由于没有指定宽度所以%-s与%s是一样的效果 0*d *是占位符,表示具体的宽度由后面的参数来指定, 0表示如果输出的数据长度不够的话以0补足, d表示输出整数,例如 printf("%05d“, 123); 是输出 00123,printf( "%0*d", 5, 123 ); 也...
sprintf()的问题!
d 有符号10进制整数 i 有符号10进制整数
VC 问题 sprintf(str,"%9.3f",x);
f指输出浮点型数据,9.3指小数部分始终为3位,若数据整数部分小于9-3则显示6位整数,大于9-3位则按实际位数显示
使用sprintf函数时应该注意什么问题
1. 保证目标缓冲区长度够用 2. 格式串和后边的参数一定要对应, 个数和类型都必须相同 3. 使用"%s"时更要加倍小心, 限制转换长度是个可行的方法, 如: "%.100s"4. 用snprintf代替sprintf, 要安全一些
米玲人参: 本函数与printf()基本一致,但输出结果写入字符串中 例:将"test 1 2"写入数组s中 #include<stdio.h> int main(void) { char s[40]; sprintf(s,"%s%d%c","test",1,'2'); /*第一个参数就是指向要写入的那个字符串的指针,剩下的就和printf()一样了 你可以比较一下,这是向屏幕输入 printf("%s%d%c","test",1,'2'); */ return 0; }
金口河区17542803399: sprintf()函数的用法 - ?
米玲人参: 原发布者:jshong2002sprintfsprintf将字串格式化.在头文件#include中语法:intsprintf(stringformat,mixed[args]...);返回值:字符串长度(strlen)1.处理字符方向.-负号时表时从后向前处理.2.填空字元.0的话表示空格填0;空格是内定值,...
金口河区17542803399: sprintf - s函数要用到什么头文件 - ?
米玲人参: sprintf函数的功能与printf函数的功能基本一样,只是它把结果输出到指定的字符串中了,看个例子就明白了:例:将"test 1 2"写入数组s中#include<stdio.h> int main(void) { char s[40];sprintf(s,"%s%d%c","test",1,'2'); /*第一个参数就是指向要写入的那个字符串的指针,剩下的就和printf()一样了可以比较一下,这是向屏幕输入 printf("%s%d%c","test",1,'2');*/ return 0; }
金口河区17542803399: 谁能说说sprintf函数的用法 - ?
米玲人参: 说明1:该函数包含在stdio.h的头文件中,使用时需要加入:#include <stdio.h> 说明2:sprintf与printf函数的区别:二者功能相似,但是sprintf函数打印到字符串中,而printf函数打印输出到屏幕上.sprintf函数在我们完成其他数据类型转换成字符串...
金口河区17542803399: 51单片机编程sprintf怎么用? - ?
米玲人参: 需要自己写个库,先取出变量的整数部分int a=x,先显示整数部分,再显示小数点,再逐一取出小数部分的每一位int b=x*10-a*10等显示在LCD上,直至所有位数显示完为止即float x==(float)a+(float)b*0.1+...
金口河区17542803399: 用简单的描述C语言 sprintf函数是什么意思 - ?
米玲人参: 通常是用来按照一定的格式,给字符窜赋值的, 像char buf[100] = {0}; char s1[10] = "hello world"; char s2[10] = "Tom"; sprintf(buf,"zifuchuan is %s,he int %s",,s1,s2); printf("buf = [%s]",buf);//输出是,也就是buf变成"zifuchuan is helloworld ,he int Tom"
金口河区17542803399: c语言sscanf和sprintf怎么用 - ?
米玲人参: 前面的s代表string,也就是字符串,c语言的字符串其实就是字符数组,因此,将输出流的默认stdout换成自己的字符数组空间就可以将信息输出到字符数组中 char str[80] = "12 34"; int x, y; sprintf(str, "%d %d", x, y); 将输入流默认的stdin换成自己的字符数组,就可以从字符串中读入了 sscanf(str, "%d%d", &x, &y);
金口河区17542803399: C语言函数sprintf - ?
米玲人参: sprintf函数的原型是这样的:int sprintf( char *buffer, const char *format, [ argument] … ); 它是将格式化的字符串打印到字符串buffer中.如printf函数是将字符串打印到屏幕,这个是到字符串而已.sprintf 只是比printf函数多了一个参数:int n = 1; char s[20] = "Hello!"; char buf[20] = {'\0'}; printf("n = %d, s = %s", n, s); //打印到屏幕 sprintf(buf, "n = %d, s = %s", n, s); //打印到buf
金口河区17542803399: c语言 sprintf 浮点数出整数 - ?
米玲人参: sprintf(s, "%d", 3.1415626); //产生:" 3"
金口河区17542803399: sprintf函数如何不四舍五入 - ?
米玲人参: 给你一个笨方法 sprintf(s, "%10.3f", (3.1415626+0.0005-0.001);