字符函数和字符串函数(1)

0. 前言

C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组中。

字符串常量 适用于那些对它不做修改的字符串函数.

1. 函数介绍

1.1 strlen

size_t strlen ( const char * str );

字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。

参数指向的字符串必须要以 '\0' 结束。 

注意函数的返回值为size_t,是无符号的( 易错 )

int main()
{
	//俩个无符号数相减得到的是无符号数
	//10000000000000000000000000000011
	//11111111111111111111111111111100
	//11111111111111111111111111111101  -3的补码
	if (strlen("abc") - strlen("abcdef") > 0)
		printf(">=\n");
	else
	printf("<\n");

	return 0;
}

因为strlen返回值是size_t类型的,而size_t是无符号数,俩个无符号数相减得到的还是无符号数

所以是">="

1.2 strcpy

char* strcpy(char * destination, const char * source );

可以在cpluscplus上查看

字符函数和字符串函数(1)_第1张图片

源字符串必须以 '\0' 结束。

会将源字符串中的 '\0' 拷贝到目标空间。

目标空间必须足够大,以确保能存放源字符串。

目标空间必须可变。 

strcpy的模拟实现

//strcpy模拟实现
#include

//strcpy 返回的是目标空间的起始地址
char* my_strcpy(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest && src);
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}


int main()
{
	char arr1[20] = { 0 };
	char arr2[] = "abc";
	/*my_strcpy(arr1, arr2);
	printf("%s\n", arr1);*/
	
	printf("%s\n", my_strcpy(arr1, arr2));
	return 0;
}

1.3 strcat

字符串追加

int main()
{
	char arr1[20] = "abc";
	char arr2[] = "def";
	strcat(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

运行结果如下 

字符函数和字符串函数(1)_第2张图片

源字符串必须以 '\0' 结束。 

目标空间必须有足够的大,能容纳下源字符串的内容。

目标空间必须可修改。

模拟实现strcat

#include

//strcat函数,返回的是目标空间的起始地址
char* my_strcat(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest && src);
	//1.找到目标空间的末尾
	while (*dest != '\0')
	{
		dest++;
	}

	//2.数据追加
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[20] = "abc";
	char arr2[] = "def";
	my_strcat(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

你可能感兴趣的:(字符函数与字符串函数,c语言)