C语言四个字符串基础函数实现

C语言字符串基础函数实现

strlen();strcpy;strcat();strcmp();这四个基础函数不管是平时的编程还是需要面对的面试,都是经常碰到的,所以这四个函数大家都要熟悉一下。
先给大家介绍一下字符串:
字符串:
由字符组成的串型结构,结束标志是 ‘\0’。
字符串字面值:
1、“由双引号包含的若干个字符”,存储在代码段,以地址形式呈现。
2、末尾有隐藏的’\0’,使用sizeof对字符串字面值进行计算可以看出。
3、虽然以地址形式呈现,但它是与数组名相应的地址,所以sizeof计算出的是字符数量+1,而不是4。
4、可以用 const char* 指针变量来存储它们的地址,长期使用,不能强行修改,否则会产生段错误。
5、相同的字符串字面值在代码段中只存储一份。
字符数组:
1、只要有’\0’结尾,字符数组可以当字符串使用。
2、如果没有’\0’,把字符数组当字符串使用,可能出现乱码,了可能出现段错误。
3、可以使用字符串字面值给字符数组初始化,不需要设置数组的长度,编译器会自动计算,并且会给’\0’留个位置。
4、字符数组被初始化完成后,程序中就有了两份相同字符串,一份在代码段(只能读不能写),另一份在栈内存(可读可写)。
下面就来实现一下这四个函数。

#include 
#include 

size_t str_len(const char* str)//字符串长度计算函数
{
	assert(NULL != str);//判断是否为空指针
	const char* tmp = str;//str由const修饰,不能直接修改
	while(*tmp) tmp++;//遍历tmp,直到遇到'\0'为止
	return tmp - str;
}

char* str_cpy(char* dest,const char* src)//字符串复制函数
{
	assert(NULL!=dest && NULL!=src);
	char* tmp = dest;
	while(*tmp++ = *src++);//同时遍历并赋值,'\0'结束
	return dest;
}

char* str_cat(char* dest,const char* src)//连接函数
{
	assert(NULL!=dest && NULL!=src);
	char* tmp = dest;
	while(*tmp)tmp++;//遍历到'\0'
	while(*tmp++ = *src++);
	return dest;
}

int str_cmp(const char* s1,const char* s2)//比较函数
{
	assert(NULL!=s1 && NULL!=s2);
	while(*s1 == *s2 && *s1) s1++,s2++;
	if(*s1 > *s2)
		return 1;
	if(*s1 < *s2)
		return -1;
	return 0;
}

你可能感兴趣的:(字符串)