C语言几个字符函数
1.字符串函数
1.1 strlen函数
cplusplus官方描述: link
size_t strlen ( const char * str );
strelen函数用来计算字符串中字符个数,以"\0"作为计算结束的标志,依次我们可以仿写函数如下:
int my_strlen(char* arr)
{
int ret = 0;
assert(arr);
while (*arr)
{
arr++;
ret++;
}
return ret;
}`
1.2 strncpy函数
cplusplus官方描述: link
char * strncpy ( char * destination, const char * source, size_t num );
strncpy函数是拷贝num个字符从源字符串到目标空间,我们仿写如下:
char* my_strncpy(char* strDest, const char* strSource, size_t count)
{
char* ret = strDest;
while (count)
{
*strDest = *strSource;
strDest++;
strSource++;
count--;
}
return ret;
}
1.3 strcmp函数
cplusplus官方描述: link
int strcmp ( const char * str1, const char * str2 );
strcmp函数是比较str1字符串与str2字符串哪边的字符比较大,从开始到结束,按照ASCII码大小进行比较,返回一个整数。若完全想等,则返回0;若某个字符较大就返回一个大于0的正数;若某个字符较小就返回一个小于0的负数。仿写如下:
int my_strcmp(const char* str1, const char* str2)
{
//判断str1与str2是否为空指针
assert(str1);
assert(str2);
int ret = 0;
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
1.4 strstr 函数
cplusplus官方描述: link
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );
strstr是一个起寻找功能的函数。在str1寻找str2中的字符串,若找得到,则返回str1中str2字符串中的开始编号。仿写如下;
char* my_strstr(const char* str1, const char* str2)
{
char* cp = str1;
char *s1, *s2;
//如果s2=0则直接返回str1的地址
if (!*str2)
return str1;
//从开始位置进行检索
while (*cp)
{
s1 = cp;
s2 = (char*)str2;
while (*s1 && *s2 && !(*s1 - *s2))
s1++, s2++;
if (!*s2)
return cp;
cp++;
}
return (NULL);
}
1.5 strncat函数
cplusplus官方描述: link
char * strncat ( char * destination, const char * source, size_t num );
strncat函数是一个起一个追加功能的函数。将strSource中的内容追加count个给strDest中。我们仿写如下:
char* my_strncat(char* strDest, const char* strSource, size_t count)
{
char* ret = strDest;
while(*strDest)
{
strDest++;
}
while (count--)
{
*strDest = *strSource;
strDest++;
strSource++;
}
return ret;
}
2. 内存函数
2.1 memcpy函数
cplusplus官网描述: link
void * memcpy ( void * destination, const void * source, size_t num )
memcpy函数是一个函数。从source的位置开始向后复制num个字节的数据到destination指向的内存位置。注意这是一个内存函数,是直接在内存上操作的函数。我们仿写如下:
void* my_memcpy(void* dest, const void* src, size_t count)
{
void* ret = dest;
assert(dest && src);
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}