字符串函数和内存函数

1.字符串函数的介绍,功能和使用

2.内存函数的介绍,功能和使用

字符串函数

1.strlen(size_t strlen(const char*str))

   计算字符串内\0之前的字符个数,并返回size_t类型的数。若字符串有多个\0,则只会计算第一个\0前的字符个数

int main()
{
	char arr[] = "abcde";
    char arr1[]="abcd\0zxc";
	printf("%d", strlen(arr));//5
    printf("%d",strlen(arr1));//4
	return 0;
}

2.strcpy,strncpy(char* strcpy/strncpy(char*dest,const char*str,(size_t n)))

       两个函数都是把字符串中的内容进行替换并返回dest的起始地址,不过strcpy是将整个str字符串替换了dest,而strncpy是将指定字节的str字符串进行替换有一些点要注意,strcpy会将\0前的字符全部拷贝并在结尾加上\0,也就是说str字符串必须包含\0且dest空间足够大,不然会出现溢出。

int main()
{
	char arr1[20] = "abcdef";//这里要定义字符串大小,而不是只初始化,不然就会出现溢出
	char arr2[] = "zxcg";
	char arr3[20] = "ABCDEF";
	strcpy(arr1, arr2);
	printf("%s\n", arr1);//zxcg
	strncpy(arr3, arr2, 2);
	printf("%s", arr3);//zxCDEF
	return 0;
}

3.strcat,strncat(char*strcat/strncat(char*dest,const char*str,(size_t n)))

       两个函数都是在dest字符串后追加str字符串并返回dest的起始地址,但是strcat是将全部的str字符串追加,而strncat是将n个字节的str追加到dest后。所以使用时要注意两个字符串都必须包含\0,且dest的空间足够大。

int main()
{
	char arr1[20] = "abcdef";
	char arr2[] = "ABCDEF";
	char arr3[20] = "ZXC";
	strcat(arr1, arr2);
	printf("%s\n", arr1);//abcdefABCDEF
	strncat(arr3, arr2, 4);
	printf("%s", arr3);//ZXCABCD
	return 0;
}

4.strcmp,strncmp(int strcmp/strncmp(const char*p1,const char*p2,(n)))

两个函数是比较字符串是否相同,相同返回0,不相同时根据相同位置的字符的ASCLL,p1>p2返回大于0的数,p1<p2返回小于0的数。strcmp是比较整个字符串,strncmp是比较n个字节字符串。

#include<stdio.h>
int main()
{
	char arr1[] = "ABCDEF";
	char arr2[] = "ABCDEF";
	char arr3[] = "abcdef";
	printf("%d\n", strcmp(arr1, arr2));//0
	printf("%d\n", strcmp(arr1, arr3));//-1
	printf("%d\n", strcmp(arr3, arr1));//1
	printf("%d\n", strncmp(arr1, arr3, 2));//-1
	printf("%d", strncmp(arr3, arr1, 2));//1
	return 0;
}

5.strstr(shar*strstr(const char*dest,const char*str))

strstr函数是在字符串dest中查找str字符串,找到就返回第一次出现的地址,找不到就返回NULL。

int main()
{
	char arr1[] = "ABCDEF";
	char arr2[] = "CD";
	printf("%s\n", strstr(arr1, arr2));//CDEF
	return 0;
}

6.strtok(char*strtok(char*str,const char*sep))

       str是被分割对象,sep是分割符的集合。其中str包含一个或多个sep,并且 strtok函数会将str字符串中的sep字符改为\0,并标记下一个字符。若str不为NULL,找到str中的第一个标记,保存他在字符串中的位置;若str为NULL,在同一个字符串中被保存的位置开始,查找下一个目标。即第一次str输入数组名,后面只需输入NULL。若字符串中不存在标记,返回NULL。

int main()
{
	char arr[] = "ljk@qqqpoc.sss";//包含sep字符串的字符串
	char* p = "@.";//分隔符的字符集合
	char buf[1024] = { 0 };
	strcpy(buf, arr);//把arr中的内容拷贝到buf中去

	char* ret = strtok(buf, p);//找到arr中的第一个标记并改为'\0',strtok函数将保存它在字符串的中的位置
	printf("%s\n", ret);//返回初始位置//1jk
	 ret = strtok(NULL, p);//找到下一个标记改为'\0',保存位置
	printf("%s\n", ret);//返回上一个标记的位置//qqqpoc
	 ret = strtok(NULL, p);
	printf("%s\n", ret);//sss
    return0; 
}

7.strerror(char*streeor(int x))

       strerror是返回错误码所对应的错误信息。在c语言中的库函数调用失败时,会将一个错误码存放在一个叫errno的变量中,当我们想知道调用库函数时发生了什么错误信息,就可以将errno的错误码翻译成错误信息。

内存函数

1.memcpy(void*memcpy(void*dest,const void*source,size_t n))

        memcpy可以将任意类型的数组进行拷贝,将n个字节的source拷贝到dest中。注意在内存重叠时不要用该函数,用memmove函数。

#include<stdio.h>
#include<string.h>
#include<memory.h>
int main()
{
	char arr1[20] = "ABCDEF";
	char arr2[] = "CD";
	int arr3[20] = { 0,1,2,3,4,5 };
	int arr4[] = { 6,7,8,9 };
	float arr5[20] = { 1.0f,2.0f,3.0f,4.0f };
	float arr6[] = { 5.0f,6.0f,7.0f,8.0f };
	memcpy(arr1, arr2, 2);
	memcpy(arr3, arr4, 12);
	memcpy(arr5, arr6, 12);
	printf("%s\n", arr1);//CDCDEF
	for (int i = 0; i < 4; i++)
	{
		printf("%d %.1f\n", arr3[i],arr5[i]);
	}//6 5.0\n7 6.0\n8 7.0\n3 4.0
	return 0;
}

2.memmove

与memcpy基本相同,是memcpy的升级版。

3.memcmp(int memcmp(const void*p1,const void*p1,size_t n))

memcmp是可以用于任意类型的数据进行比较p1和p2指针开始的n个字节,相同返回0,不相同时根据相同位置的字符的ASCLL,p1>p2返回大于0的数,p1<p2返回小于0的数。

4.memset(void memset(void*p,int x,size_t n))

memset函数是将任意类型的数据p中的n个字节修改为x(因为字符本质是使用ASCLL,而ASCLL是整形,所以是int类型)。

int main()
{
	char arr[] = "ABCDEFGH";
	int arr1[] = { 0,1,2,3,4,5,6,7 };
	memset(arr, 'x', 5);
	memset(arr1, 0, 12);
	printf("%s\n", arr);//xxxxxGH
	for (int i = 0; i < 8; i++)
	{
		printf("%d ", arr1[i]);//00034567
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sakura&NANA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值