字符串中常用函数

 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()相同,即格式字符串和待写入项的列表;

     


猜你喜欢

转载自blog.csdn.net/error0_dameng/article/details/81535374