下面是自己在使用sprintf()时的一些心得
1.在C语言的学习中,我们知道printf()是把我们想要输出的东西输出到电脑屏上,而sprintf的作用是将你想输出的东西输出到一个字符串数组里。
2.sprintf函数原型
头文件 <stdio.h>
int sprintf( char *buffer, const char *format, [ argument] … );
char *buffer(第一个参数) | 此处的实参一定要是字符串数组不能是字符串 |
---|---|
const char *format(第二个参数) | 此处写的是往字符串数组里所写的内容或者第三个参数的输出格式 |
[ argument] … (第三个参数) | 此参数可以是有多个也可以没有 |
返回值是buffer中的字节数,如果错误则返回-1。
3.sprintf()的应用
(1)首先在说sprintf前还是先说一下printf()
#include <stdio.h>
int main () {
char content[10] = {"%5s\n"};
char *count = "123";
printf(content,count);
return 0;
}
运行结果
从上面的代码可以看出printf(content, count);和printf("%5s/n", count);性质是一样的。也就是说printf()函数中的输出格式可以用一段字符串来代替。
(2)上述代码也可以使用sprintf()来完成。
如果我们使用一个字符串数组,把输出格式用sprintf()写进去就会达到同样的效果。
#include <stdio.h>
int main () {
char content[10] = {0};
char *count = "123";
sprintf(content, "%%5s\n");
printf(content,count);
return 0;
}
输出结果
%%的存在是为了避免二义性,下面我们就会讲到
(3)上述sprintf()的用法是不带第三个参数的,下面我们会给一个带第三个参数的例子
#include <stdio.h>
int main () {
char content[10] = {0};
char *count = "123";
int spaces;
printf("请输入数字123前面的空格数:");
scanf("%d", &spaces);
sprintf(content, "%%%ds\n", spaces);
printf(content,count);
return 0;
}
输出结果
下来我们说一下%二义性的问题
上述代码中的%%%ds\n的%d(%% %d s\n)是为了接收第三个参数,当你从键盘输入了20后,就代表写入字符串数组的内容变成了 %%20s\n
printf(content,count);就变成了 printf(%20s\n,count);
所以%%的存在仅仅是为了让计算机明白%%s不接收第三个参数而是%d接收参数spaces,%%的存在仅仅是为了解决二义性的问题,它的实质其实还是%s;
(4)使用sprintf模拟strcat
#include <stdio.h>
void TYF_Strcat(char *dest,char *source);
void TYF_Strcat(char *dest,char *source) {
sprintf(dest, "%s%s", dest, source);
}
int main (){
char dest[80] = {"好好学习"};
char sourse[90]={"不想学"};
TYF_Strcat(dest,sourse);
printf("%s\n", dest);
return 0;
}
运行结果
(5)使用sprintf模拟strcpy
#include <stdio.h>
void TYF_Strcopy(char *dest,char *source);
void TYF_Strcopy(char *dest,char *source) {
sprintf(dest, "%s", source);
}
int main (){
char dest[80] = {"好好学习"};
char sourse[90]={"不想学"};
TYF_Strcopy(dest,sourse);
printf("%s\n", dest);
return 0;
}
运行结果