strlen():用于统计字符串的长度。
strlen和sizeof之间的区别:
a、strlen()是一个函数,sizeof是一个运算符,这是本质上的区别
b、strlen()测量的是字符的是实际长度,以'\0'结束;如果只定义没有给他赋值,这个结果是不定的,它会从首地址一直找下去,直到遇到‘\0’为止。sizeof返回的是变量定义后所占内存的字节数,不是实际长度
c、sizeof可以用类型作为参数,而strlen只能用char*作为参数,而且是必需以‘\0’结尾的;
d、数组在作为strlen的参数时退化为指针,而sizeof的参数不退化;
e、strlen的结果要在执行时才能计算出来,是用来计算字符串的长度,不是类型占内存的大小;而sizeof不能返回动态分配的空间大小。
strcat():用于拼接两个字符串;
函数接受两个字符串作为参数。该函数把第二个字符串的备份附加到第一个字符串的末尾,并把拼接后的新字符串作为第一个字符串,第二个字符串不改变。strcat函数的类型是char*,strcat()函数返回的是第一个参数,即拼接第二个字符串后的第一个字符串的地址;
//编写一个strcat函数
#include<stdio.h>
#include<string.h>
#include<malloc.h>
char *Strcat(char *s1,char *s2)
{
char *p;
p=(char*)malloc((strlen(s1)+strlen(s2)+1)*sizeof(char*));
strcpy(p,s1);
strcpy(p+strlen(s1),s2);
p[strlen(s1)+strlen(s2)+1]='\0';
return p;
}
int main()
{
char *s,s1[]="Good",s2[]="Bye";
s=Strcat(s1,s2);
printf("连接字符串:%s\n",s);
printf("字符串长度:%d\n",strlen(s));
free(s);
}
***************************************************************************
strncat():strcat函数无法检查第一个数组是否能容纳下第二个字符串,如果分配给第一个数组的空间不够大,多出来的字符溢出到相邻的存储单元时就会出现问题。可以用strlen来计算第一个数组的空间,需要注意的是要在拼接后的字符串后加一个‘\0',就是说要给拼接后的字符串长度+1;
还有一个解决办法就是,使用strncat()函数。该函数的第三个参数指定了第一个参数最大添加字符数。最大添加字符数必须要容纳第二个字符+‘\0’;例strncat(第一个字符串,第二个字符串,最大添加字符数);
strcmp():用于字符串是否相同;strcmp(字符串1,字符串2);
strcmp返回值:若两个参数相等,返回“0”; 若参数1 大于参数而,返回一个正整数;若参数1 小于参数2,返回一个负整数;
注意:strcmp()函数比较的是两个字符串,所以参数应该是字符串,比如(“apple”,“A”),而不应该是‘A’;
strnmp();strcmp()比较字符串中的字符,直到发现不同的字符为止,这一过程可能会持续到字符串的末尾;而strncmp()函数在比较两个字符串时,可以比较到字符不同的地方,也可以只比较第三个参数指定的字符数;
#include<stdio.h>
#include<string.h>
#define LISTSIZE 6
int main()
{
const char * list[LISTSIZE]=
{
"astronomy","astouhbb",
"astrohjg","oshdvh",
"astejknk","astronn"
};
int count=0;
int i;
for(i=0;i<LISTSIZE;i++)
{
if(strncmp("astro",list[i],5)==0)
{
printf("Found:%s\n",list[i]);
count++;
}
}
printf("The list contained %d words beginning with astro.\n",count);
return 0;
}
strcpy():拷贝整个字符串,strcpy()函数相当于字符串赋值运算符;strcpy(目标字符串,被拷贝的字符串);strcpy接受两个字符串指针作为参数,可以把指向源字符串的第二个指针声明为指针,数组名或字符 串常量;而指向源字符串副本的第一个指针应声明为一个数据对象,且该对象有足够的空间资源储存源字符串的副本;
strcpy()函数还有两个有用的特性(1)strcpy返回的类型为char*,该函数返回的是第一个参数的值,即一个字符的地址。第二,第一个参数不必指向数组的开始,这个属性可用于拷贝数组的一部分;
strncpy():strcpy和strcat都有同样的问题,他们都不能检查目标空间是否能容纳源字符串的副本拷贝字符串用strncpy()更加安全,该函数的第三个参数指明可拷贝的最大字符数;
strncpy(目标字符串,被拷贝字符串,可拷贝最大字符数);
sprintf():sprintf()是把数据写到字符串中,该函数可把多个元素组合成一个字符串,sprintf的第一个参数是目标字符串的地址。其余参数和printf()相同,即格式字符串和待写入项的列表;