sprintf()的相关用法及模拟strcat()和strcpy() -破晓

本文深入探讨C语言中sprintf()函数的使用技巧,包括其基本语法、如何避免二义性、模拟strcat和strcpy功能,以及通过实例演示如何利用sprintf()进行格式化字符串输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是自己在使用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;
}

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值