1.strlen:
头文件:
函数原型:size_t strlen (const char *str)
作用: 计算一个字符串 (字符数组)中元素的个数,即从数组头部计数,直到遇到字符串结束符"\0"为止,计数结果不包括0.
//计数器方式
int my_strlen(const char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
//不能创建临时变量计数器
int my_strlen(const char * str)
{
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
//指针-指针的方式
int my_strlen(char *s)
{
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}
2.strcpy:
头文件:
函数原型:char *strcpy(char *Dest, const char *Src)
作用: 把含有"\0"结束符的字符串复制到另一个地址空间,返回值类型为char*
char* my_strcpy(char* dest,const char* src)
{
char* start = dest;
assert(dest && src);
while (*dest++ = *src++)
{
;
}
return start;
}
3.strcmp:
头文件:
函数原型:int strcmp(char str1,char str2)
作用: 对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。如果全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
4.strcat:
头文件:
函数原型:char*strcat(char* strDestination, const char* strSource)
作用: 把 strSource(源头字符串)所指向的字符串追加到 strDestination(目的地字符串)所指向的字符串的结尾,所以必须要保证 strDestination 有足够的内存空间来容纳两个字符串,否则会导致溢出错误。
char *my_strcat(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest)
{
dest++;
}
while((*dest++ = *src++))
{
;
}
return ret;
}
5.strstr:
头文件:
函数原型: char* strstr (const char* str1,const char* str2)
函数用于判断字符串str2是否是str1的子串。 如果是, 则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
if (str2 == '\0')
return str1;
char* s1 = NULL;
char* s2 = NULL;
char* cp = str1;
while (*cp)
{
s1 = cp;
s2 = str2;
while (s1 != '\0' && s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return cp;
}
cp++;
}
}
6.memcpy:
头文件:
函数原型:void *memcpy(void*dest, const void *src, size_t n);
作用:由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。
void* my_memcpy(void* str1, void* str2,size_t num)
{
void* ret = str1;
assert(str1 && str2);
while (num--)
{
*(char*)str1 = *(char*)str2;
str1 = (char*)str1 + 1;//++(char*)str1;
str2 = (char*)str2 + 1;//++(char*)str2;
}
return ret;
}
7.memmove
头文件:
函数原型:void *memmove(void *dest, const void *src, unsigned int count)
作用:由src所指内存区域复制count个字节到dest所指内存区域
void* my_memmove(void* str1, void* str2, size_t num)
{
void* ret = str1;
assert(str1 && str2);
if (str1 < str2)
{
while (num--)
{
*(char*)str1 = *(char*)str2;
str1 = (char*)str1 + 1;//++(char*)str1;
str2 = (char*)str2 + 1;//++(char*)str2;
}
}
else
{
while (num--)
{
*((char*)str1 + num) = *((char*)str2 + num);
}
}
return ret;
}
8.strerror
头文件:
函数原型:char*strerror(int errnum)
1.库函数调用失败的时候会产生错误码,而每一个错误码对应着一条错误信息,strerror函数的作用就是将错误码给转化成错误信息。
2.在C语言中有一条全局的错误码errno,在程序运行过程中,只要库函数调用失败,我们就会把此处产生的错误码放入变量errno中。
3.返回值和参数:char * strerror ( int errnum );该函数的参数就是一个错误码,输入该错误码后,经函数内部处理,将该错误码转化成一条错误信息(类型是字符串)并将该错误信息(字符串)的地址返回。
————————————————
版权声明:本文为CSDN博主「乌龙茶QAQ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/codezhu/article/details/118877528
9.perror
头文件:
函数原型:void perror(const char*str)
作用:直接打印错误信息,在打印错误信息前会先打印自定义的信息
10.memset
头文件:
函数原型:void*memset(void*ptr,int value,size_t num)
作用:作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。