头文件 string.h
strlen函数
计算字符串长度,从一个char地址出发一直到空字符,但空字符不计入总数。
用法:strlen(char*)
举例:
char a[70]="I hope you can give me a like.";fputs(a,stdout);putchar('\n');printf("%d\n",strlen(a));//总字符个数printf("%d\n",strlen(&a[3]));//从一半开始传入地址,也可以a[10] = '\0';//在一半截断fputs(a,stdout);putchar('\n');printf("%d\n",strlen(a));
结果:
strcat和strncat
用于字符串的拼接,将第二个字符串拼接到第一个字符串后面,第二个字符串保持不变,并返回第一个字符串的首地址。
char * strcat(char * , char *);
但是我们都知道字符串的容积是有限的,如果第二个字符串加上第一个字符串的大小超过了第一个字符串的限制,发生的错误strcat函数是不知道的,那么我们就需要其他的方法,如提前计算两个字符串的大小,然后进行操作。
但是呢,这样未免有一点麻烦,所以我们还有另外一个函数,strncat函数有三个参数,前两个相同,而第三个则是要拼接的长度,比如参数为5,则将第二个字符串前五位拼接到第一个字符串后面。
char a[70]="I hope you can give me a like.";
char b[20]="Will you do that?";
if(strlen(a)+strlen(b) < 70-1)strcat(a,b);
elsestrncat(a,b,70-1-strlen(a));
fputs(a,stdout);
printf("\n");
fputs(b,stdout);
(本来是想用const常量来处理70的,发现调了C99也不行,然后 int length = 70的变长数组也不行,
所以代码看着比较辣眼睛,用的是20.03的codeblocks)
strcmp函数
判断两个字符串是否相等
返回值比较有意思,如果是相同的返回0,如果第一个失配的位置上第一个数组的内容ASCII值小,返回负数,如果值相比大就返回正数。(具体数值和系统有关)
这里声明一下,空字符的排名为1。
数组传入函数的是首地址,如果是直接比较两个数组,肯定是不一样的,因为两个地址不可能相同的。
(如果是C++的string就很舒服了,直接比较就行了)
注意比较的是字符串,不看数组多长,只要空字符前内容相同就行。
其实因为char型本质上也是整数类型,也就是函数的本质是比较ASCII的值,所以传入两个char型变量也是可以的,但是不建议这样,毕竟可以用等号解决。
另外"stop"这样的字符串常量也是可以作为参数的,毕竟常数也是要保存的,也有对应的地址。
strncmp函数和上面相同,第三个参数n限定了比较字符的个数,如取5的时候,就比较前五位,相同返回0。
另外因为指针的性质,所以我们可以从字符串的一半开始传入,比较,就能实现只比较中间部分。
strcpy函数
复制函数,将第二个参数中的内容赋值到第一个里面。(同时也会将第二个字符串里面的空字符复制)
如果原来第一个有内容,就会被覆盖。
同样我们有更谨慎的选择,strncpy,第三个参数来确定复制的位数
如果在没达到位数的时候遇到空字符,直接结束,否则存储满自动结束。
记得留下空字符的位置。