一,strcpy与strncpy
1,strcat
char * strcpy ( char * destination, const char * source );
strcpy用来拷贝src中的字符到dest中,并且会在拷贝后补0.
2,strnact
char * strncpy ( char * destination, const char * source, size_t num );
strnpy与strcpy相同,不过多了一个参数限制,单位为字节,在拷贝完不会补0,如果num大于src个数,将会在拷贝后补0凑齐个数。
3,strcpy的模拟
char* my_strcpy(char* dest, const char* src)
{
char* ret = dest;
while (*src)
{
*dest = *src;
dest++;
src++;
}
*dest = *src;
return ret;
}
二,strcat与strnact
1,strcat
char * strcat ( char * destination, const char * source );
strcat用来将src中的内容追加到dest后面,并且会在结尾补0
2,strncat
char * strncat ( char * destination, const char * source, size_t num );
strncat与strcat相同,不过多了一个num,指定追加的个数,并且会在追加完补0,如果追加的个数多于src的个数,则不管多余的个数。
3,strcat的模拟
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
while (*dest)
{
dest++;
}
while (*src)
{
*dest = *src;
dest++;
src++;
}
*dest = *src;
return ret;
}
三,strcmp与strncmp
1,strcmp
int strcmp ( const char * str1, const char * str2 );
strcmp用来比较两个字符串的大小,比较出来大小就停止,否则一直比较,直到为一个字符串比较完。
2,strncmp
int strncmp ( const char * str1, const char * str2, size_t num );
strncmp与strcmp相同,不过多了一个参数限制比较的字符个数。
3,strcmp的模拟
int my_strcmp(const char* str1,const char* str2)
{
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return (*str1 - *str2);
}
四,strstr
const char * strstr ( const char * str1, const char * str2 );
返回str1中str2第一次出现的地址。
strstr的模拟
char* my_strstr(char *str1,char *str2)
{
while (*str1)
{
if (*str1 == *str2)
{
char* s1 = str1+1;
char* s2 = str2+1;
while (*s1==*s2)
{
s1++, s2++;
}
if (*s2 == '\0')
return str1;
}
str1++;
}
return NULL;
}
五,memcpy
void * memcpy ( void * destination, const void * source, size_t num );
memcpy用来将src中的内容拷贝到dest中,num为拷贝的字节数,并且在拷贝后不会补0
六,memmove
void * memmove ( void * destination, const void * source, size_t num );
该函数与memcpy最大的不同就是该函数可以拷贝重叠的内存块
memmove的模拟实现
分为两种情况
void* my_memmove(void* dest, void* src, size_t num)
{
void* ret = dest;
if (dest < src)
{
while (num--)
{
*(char*)dest = *(char*)src;
((char*)dest)++, ((char*)src)++;
}
}
else
{
dest = (char*)dest + num - 1;
src = (char*)src + num - 1;
while (num--)
{
*(char*)dest = *(char*)src;
((char*)dest)--, ((char*)src)--;
}
}
return ret;
}
七,memset
void * memset ( void * ptr, int value, size_t num );
memset的作用是将ptr后面的num个字节的内容修改为value
注意:修改的是字节,如果用在非char类型上会导致答案错误
八,memcmp
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
memcmp的作用是将ptr1与ptr2的num个字节进行比较,返回值为int
九,malloc
void* malloc (size_t size);
malloc用于动态开辟空间,结束后free释放
十,calloc
void* calloc (size_t num, size_t size);
calloc与malloc不同的是它会将每个元素赋值为0
十一,realloc
void* realloc (void* ptr, size_t size);
realloc函数是在原先开辟的空间上调整大小,size为新开辟空间字节大小。