目录

strlen函数

strcpy函数

strcmp函数

strcat函数

小结


        string,中文就是字符串的意思。顾名思义,也就是说在这个库函数头文件中的函数,都是用来处理和分析字符串的,对我们使用及研究字符串具有极大的意义。而在平时,我们对一些处理字符串的函数并不频繁使用,导致当我们想要用到它时却忘记了使用方法。
        接下来,我将举出string头文件中几个较为常见的函数,总结他们的用法和记忆方法。

strlen函数

        strlen函数是string头文件中最常见的一个函数,用于求字符串的长度。 strlen英文全称string length,既字符串长度。

string函数 mysql string函数用法举例_开发语言

         我们通过查询msdn可知,strlen库函数用法是:接收一个字符型指针(char*),返回一个size_t型的返回值。返回值即该字符串中所含有的字符个数。

char ch[] = "abcdef";
	printf("strlen = %d\n", strlen(ch));

        我们向strlen函数传入ch字符串(传入字符数组名,意味着传递的是字符数组首元素的地址,该地址可以被一个char*类型的指针所接收,符合strlen的定义)。接下来我们来看打印结果。

string函数 mysql string函数用法举例_string函数 mysql_02

        我们可以看到,在vs2022编译器环境下,打印的结果为6,证明我们的字符串长度为6。这里我们要分辨一下,该字符串数组中到底有几个元素?真的是6个元素吗

printf("sizeof = %d\n", sizeof(ch)/sizeof(ch[0]));

string函数 mysql string函数用法举例_c++_03

         计算数组元素个数,输出的元素个数为7,可是我们所求的字符串长度不是只有6吗?多出来的一个元素是什么呢?

string函数 mysql string函数用法举例_c++_04

        打开调试模式,监视字符串数组,可以看到,在数组的第七位,存放了一个'\0'字符,这个字符有什么用呢?为什么我们明明没有输入,为什么会自动添加上一个'\0'呢?

        其实,由于我们输入的是一整个字符串,当输入结束的时候,自动添加了一个'\0'作为结尾字符。而strlen函数的计算方法是,从传入的数组首元素地址开始遍历,直到遍历到第一个'\0'字符,意味着遍历结束,记录当前的字符个数,并不计入'\0'。由此我们就可以知道,为什么字符串的sizeof是7,而strlen只有6了,因为遍历到'\0'就结束了!!!'\0'并不会被记录进长度!

        因此我们在使用strlen函数的时候要格外注意,字符串当中有没有'\0',它的位置在哪里,'\0'就是strlen的停止字符,遇到'\0',strlen就会停止计数,返回长度值。

char ch1[] = { 'a','b','c','d','e','f','\0' };
	char ch2[] = { 'a','b','c','\0','d','e','f','\0' };
	char ch3[] = { 'a','b','c','d','e','f' };
	printf("strlen = %d\n", strlen(ch1));

	printf("strlen = %d\n", strlen(ch2));
	//ch2中,第一个'\0'在第四个位置,所以strlen函数在读到它时,就会停止计数,返回3

	printf("strlen = %d\n", strlen(ch3));
	//由于ch3是单个字符输入,没有添加'\0',所以ch3要一直等到遍历到第一个'\0'才会停止计数

string函数 mysql string函数用法举例_数组_05

strcpy函数

        strcpy,英文全称copies strcpy,也是一个string头文件中较为常见的函数,用于将一个字符串的内容复制到另一个数组中。

string函数 mysql string函数用法举例_数组_06

        我们通过查询msdn可知,strcpy的使用方法是向其传入两个char* 指针,前者是目标数组首元素地址指针,后者是原字符串数组地址指针,将原字符串数组(包括末尾结束标志’\0’)拷贝到目标数组中。若目标数组中本身具有元素,则根据原字符串数组的长度一一覆盖(注意:为了防止数组溢出,目标数组长度应大于原字符串数组!!!)

char ch1[20];
	char ch2[] = "abcdef";
    //将字符串ch2的内容,拷贝到ch1中
	printf("ch1 = %s\n", strcpy(ch1, ch2));

string函数 mysql string函数用法举例_数组_07

 接下来,我们再探讨一下strcpy函数拷贝的一些细节问题。请看如下代码

char ch1[8] = "abcdef";;
   	char ch2[8] = "ghi";
	//将字符串ch2内容,拷贝到ch1中
	printf("ch1 = %s\n", strcpy(ch1, ch2));

        这段代码中的字符串ch2,是小于ch1字符串长度的。strcpy函数进行的到底是不是之前所说的覆盖操作?按F10,进入调试模式。我们通过监视器可以看到,ch1和ch2中存放的内容。

string函数 mysql string函数用法举例_数组_08

string函数 mysql string函数用法举例_c++_09

        执行strcpy函数,得到ch1中存放的新的结果。

string函数 mysql string函数用法举例_c++_10

        我们就此时ch1所存储的内容做一个简单的分析。可以看到,此时确实是将ch2中的内容完全拷贝到ch1中,并且覆盖的也是前四个字符,而且因为连同ch2中的'\0'也一起拷贝过来了,所以在打印字符串的时候,只会打印到'\0'之前,遇到它就停止打印,所以也不会打印之后的'e''f'。由此我们得出结论,strcpy函数确实是进行的覆盖操作,并且会连同ch2中的'\0'字符一起拷贝到目标字符串当中(这一点非常重要!!!)。

string函数 mysql string函数用法举例_开发语言_11

strcmp函数

        strcmp函数,英文全称compares string(字符串比较), 既用于比较两个字符串,那么这里是比较字符串的什么呢?这里的比较是这样的:先比较两个字符串的第一个字符的ASCII码值(这里视为第一对字符),(下面的比较均是ASCII码值的比较)如果第一个字符串的第一个字符大于第二个字符串的第一个字符,则返回1;反之,则返回-1;若两个字符相等,则进行下一对字符的比较,直到出现有一对字符不同则返回相应的值(1或-1)。若两个字符串所有的字符都相同,则返回数字0。

string函数 mysql string函数用法举例_数组_12

        我们通过查询msdn可知,strcpy的使用方法是向其传入两个char* 指针,代表两个字符串数组的首元素地址。返回一个int型返回值,用以判断两个字符串的关系。(一定要牢记,判断的是字符的ASCII码值!!!

char ch1[] = "abcdf";
	char ch2[] = "abcde";

	int ret = strcmp(ch1, ch2);

	if (ret > 0)
	{
		printf("ch1 > ch2\n");
	}
	else if (ret == 0)
	{
		printf("ch1 == ch2\n");
	}
	else
	{
		printf("ch1 < ch2\n");
	}

以上示范代码,就是用来判断"abcdef"和"abcde"哪个字符串大的。我们可知字符'f'的ASCII码值为102,'e'的ASCII码值为101,所以应当是ch1字符串大于ch2字符串。接下来运行程序,验证我们的结论。

string函数 mysql string函数用法举例_数组_13

 果然是ch1 > ch2字符串。在使用strcmp函数时只需要注意一点,ASCII码值的最小数是0,代表字符是'\0',不会有任何数小于它。所以如果所有字符都相等,那么最后结尾的'\0'就意味着'\0'=='\0',如果一个字符串长度小于另一个,而前面所有字符都相等,那么此时任意字符都大于'\0',所以短的字符串小(例如abcdefabcde,可以自己尝试验证一下)。

strcat函数

        strcat,英文全称concatenates string(连接字符串),这里很容易理解,strcat函数就是用于连接两个字符串的。

string函数 mysql string函数用法举例_字符串_14

        我们通过查询msdn可知,使用strcat函数需向其传入两个char* 指针,前者是目标数组首元素地址指针,后者是原字符串数组地址指针(与strcpy类似,只不过这里是将原字符串接到目标字符串后面)。传参成功后,strcat会将原字符串的第一个字符覆盖到目标字符串的’\0’位置,后面再接着原字符串剩下的全部字符,直到遇见’\0’后结束,保证了拼接后的字符串只有一个结束标志’\0’

char ch1[20] = "hello";
	char ch2[20] = " world";
    //将ch2字符串,拼接到ch1字符串后面
	printf("strcat = %s\n", strcat(ch1, ch2));

string函数 mysql string函数用法举例_字符串_15

        strcat函数的使用方法很简单,我们需要牢记的只有一点注意事项。我们所连接的字符串数组,必须要能在连接完成之后,存放的下新的字符串,否则会发生数组溢出现象。所以保险起见,我们每次在使用strcat函数之前,都要规定给目标字符串一个合适的长度,防止数组溢出,从而引发报错。

小结

        我们通过了解一些常用的string库函数的使用方法,以及原理,可以总结出一些适用于字符串处理的规律。即:

1、见到'\0'要格外注意,无论是在字符串结尾还是在字符串当中,他都可能会对我们的一些操作产生影响。

2、时刻注意字符串数组的存储空间情况,预防发生数组溢出

3、在使用string库函数的过程中,我们通常传递的是字符串数组的数组名,它代表着的含义是数组首元素的地址。也就是说我们并不是将整个数组传递给函数,而是通过指针和地址的方式,来进行调用数据。这个是未来学习C语言和C++的重要知识点,通过指针的数据传递更加高效和便捷。