sprintf函数的详解及sprint与printf结合使用 —————— 开开开山怪

1> 头文件

   sprintf()函数的头文件是 stdio.h

2>应用格式

   int sprintf(char *str, char *format, [content1,content2.....]);

返回值: 函数返回字符串str的长度

char one[80] = {"nihao"};
char two[80] = {"hellow world"};
int temp = 0;

temp =  sprintf(one, "%s", two);
printf("temp = %d", temp);

sprintf函数的详解及sprint与printf结合使用 —————— 开开开山怪_第1张图片

3> 参数解析

1> char *str str是目标字符串,是将format字符串最终的内容赋值给str形成一个新的字符串
2> char *format format字符串是将content的内容凭借format的内容进行格式化并形成format字符串
3> content 可以是常量,也可以是变量

4> 正确应用示例

例1.

char one[80] = {"nihao"};
char two[80] = {"hellow world"};
 
sprintf(one, "%s%s", one, two);

此时"%s%s" 将one two进行格式化形成字符串 “nihaohellow world”;
再将形成的字符串的内容赋值给one,此时one形成一个新的字符串"nihaohellow world"
而不再是之前的"nihao";

例2.

char one[80] = {"nihao"};
char two[80] = {"hellow world"};

sprintf(one, "%%s");

此时"%%s"并不是格式符,所以content的内容可以不存在,也不需要将内容格式化形成字符串
此时的"%%s" 赋值给one one的结果是"%s" “%%s"这样的写法是避免二义性,真正的字符串内容为”%s"

例3.

char one[80] = {"nihao"};
char two[80] = {"hellow world"};

sprintf(one, "%%%ds", 5);

此时的5应被%d格式化,相当于替代了%d的位置
此时的"%%%ds" 通过将5对应格式化之后 变为"%%5s" 同样也是避免二义性 one的结果为"%5s"

例4.

char one[80] = {"nihao"};
char two[80] = {"hellow world"};
	
sprintf(one, "%%%ds", 5);
printf(one, "1");

此时的printf(one, “1”) 相当于是printf("%5s", “1”),
以%5s输出,不够5个字符,输出左边用空格补齐
最终的printf的结果显示就是

sprintf函数的详解及sprint与printf结合使用 —————— 开开开山怪_第2张图片
例5.

 char one[80] = {"nihao"};
char two[80] = {"hellow world"};

sprintf(one, "%s\n", two);
printf("%s",one);

此时的"%s\n"将two格式化形成字符串"hellow world\n",然后one的内容就被赋值为"hellow world\n"
此时的printf("%s", one) 相当于是printf("%s", “hellow world\n”);
以%s形式输出,自然在屏幕上输出的结果就是
sprintf函数的详解及sprint与printf结合使用 —————— 开开开山怪_第3张图片
会有一个回车显示是因为此时\n 就是字符回车 。

5>错误示例

char *one;
char *two;
        
sprintf(one, "%%s");

此时是错误的,one应该是一个具有一定明确空间的字符串数组名

6>温馨提示

  1. 其实sprintf( , , )相当于从右往左依次赋值的过程
  2. 函数中的第一个参数 必须是一个已经有一定空间的的字符串数组名
  3. 这些内容的总结是本人在学习过程中自己理解的,并且通过上机验证过的,如有不足之处还望各位大侠提出。

你可能感兴趣的:(sprintf函数的详解及sprint与printf结合使用 —————— 开开开山怪)