sprintf方法,sprintf的作用
c语言sprintf是什么意思,和printf神马区别
printf是进行画面输出的方法,起到同样效果但输出结果是字符串对象的方法是sprintf。sprintf的"s"我们可以看作是"String"的"s",这样就记住了该方法的意义。
sprintf常常用于那些使用字符串类方法来处理生成不规则的字符串的场合。
int printf( const char *format [, argument]... );
printf只是格式化输出参数到标准输出
int sprintf( char *buffer, const char *format [, argument] ... );
sprintf除了安格式输出外,将输出字节串存入buffer
#include stdio.h
void main( void )
{
char buffer[200], s[] = "computer ", c = 'l ';
int i = 35, j;
float fp = 1.7320534f;
/* Format and print various data: */
j = sprintf( buffer, "\tString: %s\n ", s );
j += sprintf( buffer + j, "\tCharacter: %c\n ", c );
j += sprintf( buffer + j, "\tInteger: %d\n ", i );
j += sprintf( buffer + j, "\tReal: %f\n ", fp );
printf( "Output:\n%s\ncharacter count = %d\n ", buffer, j );
}
算了再说下fprintf()
int fprintf( FILE *stream, const char *format, ... ); fprintf()函数根据指定的format(格式)(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.
void main( void )
{
int i = 10;
double fp = 1.5;
char s[] = "this is a string";
char c = '\n';
stream = fopen( "fprintf.out", "w" );
fprintf( stream, "%s%c", s, c );
fprintf( stream, "%d\n", i );
fprintf( stream, "%f\n", fp );
fclose( stream );
}
C++中如何调用sprintf方法
//头文件
#include stdio.h
int main(void)
{
int a, b;
char buffer[100];
a = 100;
b = 200;
//和在c里使用没什么区别
sprintf(buffer, "%d", a + b);
printf("%s", buffer);
}
sprintf函数,如果第一个参数与第三个参数相同
不要这样做,这是未定义的行为。
参考资料:网页链接
C 标准及POSIX?指定?sprintf?及其变体的行为在参数与目标缓冲区重叠时未定义。示例:
sprintf(dst, "%s and?%s", dst, t); // - 有错:未定义行为
如何用sprintf直接连接两个字符串
sprintf功能很强大,能连接任何格式的任何变量到一起,然后我用它来直接连接(或叫合并)两个字符串的时候,发现得不到正确的结果,然后呢?
1、错误做法1
int main ()
{
char * a1 = "shengruxiahua,siruzhaolu";
char * a2 = "wo ai beijing tian an men";
char * s;
s = malloc ( 10000 );
sprintf (s,"%s%s",a1,a2);
printf ("the s is %s\n",s);
return 0;
}
这样得不到正确结果,原因我不是很清楚了。
2、错误做法2
int main ()
{
char * a1 = "shengruxiahua,siruzhaolu";
char * a2 = "wo ai beijing tian an men";
char * s;
s = malloc ( 10000 );
sprintf (s,"%.*s%.*s",sizeof(a1),a1,sizeof(a2),a2);
printf ("the s is %s\n",s);
return 0;
}
这样也得不到正确的结果,因为sizeof(a1)结果为4,仅表示a1首地址的大小,就是4个字节啦。
2、正确做法
int main ()
{
char * a1 = "shengruxiahua,siruzhaolu";
char * a2 = "wo ai beijing tian an men";
char * s;
s = malloc ( 10000 );
sprintf (s,"%.*s%.*s",strlen(a1),a1,strlen(a2),a2);
printf ("the s is %s\n",s);
return 0;
}
这样就能把a1和a2这两个字符串直接连接到一起了。
C语言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
sprintf格式的规格如下所示。[]中的部分是可选的。
%[指定参数][标识符][宽度][.精度]指示符
若想输出'%'本身时, 请使用'%%'处理。
1. 处理字符方向。负号时表示从后向前处理。
2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
3.?字符总宽度。为最小宽度。
4. 精确度。指在小数点后的浮点数位数。
转换字符
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。