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);
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的结果显示就是
例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形式输出,自然在屏幕上输出的结果就是
会有一个回车显示是因为此时\n 就是字符回车 。
5>错误示例
char *one;
char *two;
sprintf(one, "%%s");
此时是错误的,one应该是一个具有一定明确空间的字符串数组名
6>温馨提示
- 其实sprintf( , , )相当于从右往左依次赋值的过程
- 函数中的第一个参数 必须是一个已经有一定空间的的字符串数组名
- 这些内容的总结是本人在学习过程中自己理解的,并且通过上机验证过的,如有不足之处还望各位大侠提出。