模拟实现strncpy()strncmp()strncat()

核心

  • strncpy() : 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
  • strncmp() : 比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。
  • strncat() : 如果源中C字符串的长度小于num,则只复制到’\0’之前的内容。

实现

  • strncpy()
char* MyStrncpy(char* dest, const char* src, int num){
	assert(dest != NULL && src != NULL);
	char* p = dest;
	while (num && *src != '\0'){
		*dest = *src;
		dest++;
		src++;
		num--;
	}
	while (num){
		*dest = '0';
		num--;
		dest++;
	}
	*dest = '\0';
	return p;
}
int main () {
	char str1[100] = "asd";
	char str2[100] = "asda";
	int num = 10;
	MyStrncpy(str1, str2, num);
	return 0;
}
  • strncmp()
int MyStrncmp(const char* str1, const char* str2, int num){
	assert(str1 != NULL && str2 != NULL);
	while ((*str1 != '\0' || *str2 != '\0') || num){
		if (*str1 - *str2 > 0){
			return 1;
		}else if (*str1 - *str2 < 0){
			return -1;
		}
		num--;
		str1++;
		str2++;
	}
	return 0;
}
int main () {
	char str1[100] = "asdaa";
	char str2[100] = "asdaa";
	int num = 10;
	int ret = MyStrncmp(str1, str2, num);
	return 0;
}
  • strncat()
char* MyStrncat(char* dest, const char* src, int num){
	assert(dest != NULL && src != NULL);
	char* p = dest;
	while (*dest != '\0'){
		dest++;
	}
	while (num && *src != '\0'){
		*dest = *src;
		dest++;
		src++;
		num--;
	}
	*dest = '\0';
	return p;
}
int main () {
	char str1[100] = "asd";
	char str2[100] = "asda";
	int num = 10;
	MyStrncat(str1, str2, num);
	return 0;
}
发布了60 篇原创文章 · 获赞 5 · 访问量 2649

猜你喜欢

转载自blog.csdn.net/qq_44905386/article/details/99858144
今日推荐