C语言之strlen,strcpy,strcat,strcmp的实现原理(笔试概率很大,一定要掌握其原理!)

1、strlen函数
头文件:#include
函数原型:size_t strlen(const char *s);
功能:计算字符串s的长度,不包括’\0’。
参数:s表示指向被计算的字符串的首地址。
返回值:返回字符串中字符的个数。
补充:strlen和sizeof的区别
相同点
sizeof与strlen都可以计算空间大小。
不同点
(1)sizeof计算字符串时,以保存字符串的空间大小为准;strlen计算时,以字符串中字符个数为准,不包括’\0’,
参数只能是字符数组或者字符指针。
(2)sizeof是关键字、运算符;strlen是函数。
(3)sizeof可以计算变量、常量、表达式、指针、数组、结构体、字符串等;strlen只能用来计算字符串。
strlen实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main(int argc,char *argv[])
{
    char str[] = "hello world!";
    int count = 0;
    while(str[count] != '\0')
    {
        count++;
    }
    printf("length = %d\n",count);//length = 12
    return 0;
}

2、strcpy函数
头文件: #include
函数原型:char *strcpy(char *dest, const char *src);
参数:src、dest表示指向两个字符串的首地址。
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。
返回值:返回dest指针指向的字符串。
strcpy实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(int argc,char *argv[])
{
    char str1[32] = "hello world!";
    char str2[32] = "abcd";

    int i = 0,j = 0;
    while(str2[j] != '\0')
    {
        str1[i] = str2[j];
        i++;
        j++;
    }
    str1[i] = '\0';
    printf("str1 = %s\n",str1);//str1 = abcd
   
    return 0;
}

3、strcat函数
头文件: #include
函数原型:char *strcat(char *dest, const char *src);
参数:dest、src表示指向两个字符串的首地址。
功能:将src字符串追加到dest字符串,覆盖dest末尾的终止空字节(’\0’),然后添加一个终止空字节(’\0’)。
返回值:返回dest指针指向的字符串。
strcat实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main(int argc,char *argv[])
{
    char str1[32] = "hello world!";
    char str2[32] = "hello world!";

    int i = 0,j = 0;
    while(str1[i] != '\0')
    {
        i++;
    }

    while(str2[j] != '\0')
    {
        str1[i++] = str2[j++];
    }
    str1[i] = '\0';
    printf("str1 = %s\n",str1);//str1 = hello world!hello world!

    return 0;
}

4、strcmp函数
头文件: #include
函数原型: int strcmp(const char *s1, const char *s2);
参数:s1、s2表示指向两个字符串的首地址。
功能:比较两个字符串。
返回值::返回一个小于、等于或大于零的整数。
补充:
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值等于 0,则表示 str1 等于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
strcmp实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>

int main(int argc,char *argv[])
{
    char str1[32] = "hello ";
    char str2[32] = "hello world!";

    int i = 0,j = 0;
    while(str1[i] != '\0' && str2[j] != '\0')
    {
        if(str1[i] > str2[j])
        {
            printf("1\n");
            return 0;
        }
        else if(str1[i] < str2[j])
        {
            printf("-1\n");
            return 0;
        }
        else
        {
            i++;
            j++;
        }
    }

    if(str1[i] != '\0' && str2[j] == '\0')
    {
        printf("1\n");
    }

    if(str1[i] == '\0' && str2[j] != '\0')
    {
        printf("-1\n");
    }

    if(str1[i] == '\0' && str2[j] == '\0')
    {
        printf("0\n");
    }

    return 0;//最终运行结果:-1
}