字符串函数与内存函数

一,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为新开辟空间字节大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值