1.实现strcpy 2.实现strcat 3.实现strstr 4.实现strchr 5.实现strcmp 6.实现memcpy 7.实现memmove

本文深入探讨了C语言中的字符串处理和内存操作函数,包括strcpy、strcat、strstr、strcmp、memcpy和memmove的实现原理及使用场景,强调了assert断言在预防错误中的作用。

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

//assert 断言,用于提示一些可能存在的错误,相较于if的作用更加的激烈。
//strcpy:复制
char* Strcpy(char* dest, const char* source){
	char* ret = dest;
	assert(dest != NULL && source != NULL);
	while (*dest++ = *source++){
		;
	}
	return ret;
}


//strcat:拼接
char* Strcat(char* dest, const char* source){
	char* ret = dest;
	assert(dest != NULL && source != NULL);
	while (*dest != '\0'){
		*dest++;
	}
	while (*dest++ = *source++){
		;
	}
	return ret;
}

//strstr:判断一个字符串里是否包含另一个。
char* Strstr(const char* dest, const char* src){
	const char* str1 = dest;
	const char* str2 = src;
	const char* ret = dest;
	assert(dest != NULL && src != NULL);
	if (*src == '\0'){
		return (char*)dest;
	}
	while (*ret){
		str1 = ret;
		str2 = src;
	}
	while (*str1 && *str2 && *str1 == *str2){
		str1++;
		str2++;
	}
	if (*str2 == '\0'){
		return (char*)ret;
	}
	return NULL;
}

//strcmp:字符串比较
char* Strcmp(const char* dest, const char* src){
	assert(dest != NULL && src != NULL);
	while (*dest == *src){
		if (*dest == '\0'){
			return 0;
		}
		dest++;
		src++;
	}
	return *dest - *src;
}

//memcpy :内存的拷贝,定义在string.h里。
void* Memcpy(void* dest, void* src, int count){
	void* ret= dest;
	assert(dest != NULL && src != NULL);
	while (count--){
		*(char*)dest = *(char*)src;
		((char*)dest)++;
		((char*)src)++;
	}
	return ret;
}

//memmove:在一个内存中拷贝,可以理解为memcpy的升级版,解决缓冲区的重叠
void* my_memmove(void* dest,void* src, size_t count){
	void* ret = dest;
	if (dest <= src || (char*)dest >= ((char*)src + count)) {
		while (count--) {
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else {
		dest = (char*)dest + count - 1;
		src = (char*)src + count - 1;
		while (count--) {
			*(char*)dest = *(char*)src;
			dest = (char*)dest - 1;
			src = (char*)src - 1;
		}
	}
	return(ret);

}



//strchr:是查找字符串dest中首次出现src的位置。
char* my_strchr(char* dest, char src){
	while (*dest != '\0' && *dest != 'src'){
		dest++;
	}
	return *dest == src ? dest : NULL;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值