C PRIMER PLUS第十一章第七题模拟strncpy

本文介绍了如何编写mystrncpy函数,它模仿strncpy行为,将源字符串s2的前n个字符复制到目标字符串s1,并根据需要添加空字符。通过实例展示了如何在主函数中测试这个函数,通过循环调整参数观察其行为。

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

strncpy(s1, s2, n)函数把s2中的n个字符拷贝至s1中,截断s2,或者有必要的话在末尾添加空字符。如果s2的长度是n或多于n,目标字符串不能空字符结尾。该函数返回s1.自己编写一个这样的函数,名为mystrncpy()。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。

以下为代码:

#include <stdio.h>
#define SIZE 10

char * mystrncpy(char *, const char *, int);
int main(void)
{
	char a[SIZE + 1] = {'h', 'e', 'l', 'l', 'o', '\0', [8] = '!'}; //检查是否末尾有'\0' 
	char b[SIZE] = "guy";
	
	mystrncpy(a, b, 3); //通过调整第3个参数来观察是否添加'\0' 
	puts(a);
	return 0;
}

char * mystrncpy(char * s1, const char * s2, int n)
{
	char * ptr = s1;
	char * pst = s2;
	
	while(*ptr) //找到'\0' 
	ptr++;
	while(pst < s2 + n && *pst)
	{
		*ptr++ = *pst++;
	}
	if(pst < s2 + n) //如果s2长度小于n,给s1末尾填上'\0' 
	*ptr = *pst;
	
	return s1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值