size_t strlen(char* str)
{
assert(str != NULL);
int len = 0;
while(*str != '\0')
{
str++;
len++;
}
return len;
}
char* strcpy(char* dest, const char* src)
{
assert(dest != NULL && src != NULL);
char* tmp = dest;
while(*src != '\0')
{
*tmp++ = *src++;
}
*tmp = '\0';
return dest;
}
char* strncpy(char* dest, const char* src, size_t n)
{
assert(dest != NULL && src != NULL);
char* tmp = dest;
int len = strlen(tmp);
int m = n;
while(n-- > 0 && *src != '\0')
{
*tmp++ = *src++;
}
if(m > len) //需要复制的字符数少于原字符串长度时不加'\0'
*tmp = '\0';
return dest;
}
char* strcat(char* dest, const char* src)
{
assert(dest != NULL && src != NULL);
char* tmp = dest;
while(*tmp != '\0')
{
tmp++;
}
while(*src != '\0')
{
*tmp++ = *src++;
}
*tmp = '\0';
return dest;
}
char* strncat(char* dest, const char* src, size_t n)
{
assert(dest != NULL && src != NULL);
char* tmp = dest;
while(*tmp != '\0')
{
tmp++;
}
while(n-- > 0 && *src != '\0')
{
*tmp++ = *src++;
}
*tmp = '\0';
return dest;
}
int strcmp(const char* s1, const char* s2)
{
assert(s1 != NULL && s2 != NULL);
while(*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if(*s1 < *s2)
return -1;
if(*s1 > *s2)
return 1;
return 0;
}
int strncmp(const char* s1, const char* s2, size_t n)
{
assert(s1 != NULL && s2 != NULL);
while(--n > 0 && *s1 != '\0' && *s2 != '\0' && *s1 == *s2)//使用前--不会导致最后多一位
{
s1++;
s2++;
}
if(*s1 < *s2)
return -1;
if(*s1 > *s2)
return 1;
return 0;
}
strlen(), strcpy(), strncpy(), strcat(), strncat(), strcmp(), strncmp()函数的封装
于 2022-06-29 20:03:01 首次发布