C 标准库 string.h

  • Post category:C

C 标准库 string.h 提供了一系列用于处理字符串的函数,包括复制、比较、连接、搜索、分割等功能。下面我们详细讲解其完整使用攻略。

1. 复制操作

strcpy

原型:char *strcpy(char *dest, const char *src)

作用:将字符串 src 复制到 dest 中,并返回 dest

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello, World!";
    char str2[20];

    // 复制 str1 到 str2
    strcpy(str2, str1);

    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);

    return 0;
}

输出:

str1: Hello, World!
str2: Hello, World!

strncpy

原型:char *strncpy(char *dest, const char *src, size_t n)

作用:将字符串 src 的前 n 个字符复制到 dest 中,并返回 dest

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello, World!";
    char str2[20];

    // 复制 str1 的前 8 个字符到 str2
    strncpy(str2, str1, 8);

    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);

    return 0;
}

输出:

str1: Hello, World!
str2: Hello, W

2. 比较操作

strcmp

原型:int strcmp(const char *str1, const char *str2)

作用:按字典顺序比较字符串 str1str2,返回值为 0 表示相等,为正数则 str1 大于 str2,为负数则 str1 小于 str2

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello, World!";
    char str2[] = "Hello, World!";
    char str3[] = "hello, world!";

    int result1 = strcmp(str1, str2);
    int result2 = strcmp(str1, str3);

    printf("result1: %d\n", result1);
    printf("result2: %d\n", result2);

    return 0;
}

输出:

result1: 0
result2: 32

strncmp

原型:int strncmp(const char *str1, const char *str2, size_t n)

作用:按字典顺序比较字符串 str1str2 的前 n 个字符,返回值与 strcmp 相同。

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello, World!";
    char str2[] = "Hello, W";
    char str3[] = "Hello, w";

    int result1 = strncmp(str1, str2, 8);
    int result2 = strncmp(str1, str3, 8);

    printf("result1: %d\n", result1);
    printf("result2: %d\n", result2);

    return 0;
}

输出:

result1: 0
result2: 32

3. 连接操作

strcat

原型:char *strcat(char *dest, const char *src)

作用:将字符串 src 连接到 dest 的末尾,并返回 dest

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello, ";
    char str2[] = "World!";

    // 连接 str2 到 str1 的末尾
    strcat(str1, str2);

    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);

    return 0;
}

输出:

str1: Hello, World!
str2: World!

strncat

原型:char *strncat(char *dest, const char *src, size_t n)

作用:与 strcat 类似,但只连接 src 的前 n 个字符到 dest 的末尾,并返回 dest

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello, ";
    char str2[] = "World!";

    // 连接 str2 的前 3 个字符到 str1 的末尾
    strncat(str1, str2, 3);

    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);

    return 0;
}

输出:

str1: Hello, Wor
str2: World!

4. 搜索操作

strstr

原型:char *strstr(const char *haystack, const char *needle)

作用:在字符串 haystack 中搜索子串 needle,返回指向第一次出现的位置的指针,如果未找到则返回 NULL。

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";

    // 在 str 中搜索子串 "World"
    char *result = strstr(str, "World");

    printf("result: %s\n", result);

    return 0;
}

输出:

result: World!

5. 分割操作

strtok

原型:char *strtok(char *str, const char *delims)

作用:分割字符串 str,delims 为分隔符,函数第一次调用时将 str 作为参数传入,之后再次调用时将传入 NULL。每次调用将返回被分割出的子串。

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "apple,banana,grape";

    // 按逗号分割 str
    char *result = strtok(str, ",");

    while (result != NULL) {
        printf("%s\n", result);
        result = strtok(NULL, ",");
    }

    return 0;
}

输出:

apple
banana
grape

总结

C 标准库 string.h 提供了一系列用于处理字符串的函数,其中复制、比较、连接、搜索、分割等操作可以满足不同的需求。在使用这些函数时需要注意内存分配是否充足、避免指针越界等问题,并根据具体的需求选择合适的函数来操作字符串。