详解C语言字符串操作函数

字符串操作函数

  • [1. 字符串长度函数:`strlen`](#1. 字符串长度函数:strlen)
  • [2. 字符串复制函数:`strcpy` 和 `strncpy`](#2. 字符串复制函数:strcpystrncpy)
    • [2.1 `strcpy`](#2.1 strcpy)
    • [2.2 `strncpy`](#2.2 strncpy)
  • [3. 字符串拼接函数:`strcat` 和 `strncat`](#3. 字符串拼接函数:strcatstrncat)
    • [3.1 `strcat`](#3.1 strcat)
    • [3.2 `strncat`](#3.2 strncat)
  • [4. 字符串比较函数:`strcmp` 和 `strncmp`](#4. 字符串比较函数:strcmpstrncmp)
    • [4.1 `strcmp`](#4.1 strcmp)
    • [4.2 `strncmp`](#4.2 strncmp)
  • [5. 字符串查找函数: `strchr` 和 `strrchr` 和 `strstr`](#5. 字符串查找函数: strchrstrrchrstrstr)
    • [5.1 `strchr`](#5.1 strchr)
    • [5.2 `strrchr`](#5.2 strrchr)
    • [5.3 `strstr`](#5.3 strstr)
  • [6. 字符串分割函数:`strtok`](#6. 字符串分割函数:strtok)
  • [7. 内存操作函数:`memcpy` 和 `memmove`](#7. 内存操作函数:memcpymemmove)
    • [7.1 `memcpy`](#7.1 memcpy)
    • [7.2 `memmove`](#7.2 memmove)
  • [8. 字符串填充与清空函数:`memset`](#8. 字符串填充与清空函数:memset)
    • [8.1 `memset`](#8.1 memset)

C语言标准库提供了许多字符串操作函数,用于对字符串进行复制、拼接、比较、查找等操作。这些函数都定义在头文件 <string.h> 中。


1. 字符串长度函数:strlen

  • 功能:计算字符串的长度(不包括结尾的 \0)。
  • 原型:size_t strlen(const char *str);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    printf("字符串长度是: %zu\n", strlen(str)); // 输出字符串长度
    return 0;
}

运行结果:

bash 复制代码
字符串长度是: 13

2. 字符串复制函数:strcpystrncpy

2.1 strcpy

  • 功能:将源字符串复制到目标字符串。
  • 原型:char *strcpy(char *dest, const char *src);
  • 注意:目标字符串必须有足够的空间,否则会导致缓冲区溢出。
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello";
    char dest[10];
    strcpy(dest, src);
    printf("复制后的字符串: %s\n", dest);
    return 0;
}

运行结果:

bash 复制代码
复制后的字符串: Hello

2.2 strncpy

  • 功能:复制指定长度的字符串。
  • 原型:char *strncpy(char *dest, const char *src, size_t n);
  • 注意:如果源字符串长度小于 n,目标字符串会被填充空字符。
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello";
    char dest[10] = {0};
    strncpy(dest, src, 3);
    printf("部分复制后的字符串: %s\n", dest);
    return 0;
}

运行结果:

bash 复制代码
部分复制后的字符串: Hel

3. 字符串拼接函数:strcatstrncat

3.1 strcat

  • 功能:将源字符串拼接到目标字符串的末尾。
  • 原型:char *strcat(char *dest, const char *src);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello";
    char str2[] = " World";
    strcat(str1, str2);
    printf("拼接后的字符串: %s\n", str1);
    return 0;
}

运行结果:

bash 复制代码
拼接后的字符串: Hello World

3.2 strncat

  • 功能:拼接指定长度的字符串。
  • 原型:char *strncat(char *dest, const char *src, size_t n);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello";
    char str2[] = " World";
    strncat(str1, str2, 3); // 只拼接 " Wor"
    printf("部分拼接后的字符串: %s\n", str1);
    return 0;
}

运行结果:

bash 复制代码
部分拼接后的字符串: Hello Wor

4. 字符串比较函数:strcmpstrncmp

4.1 strcmp

  • 功能:比较两个字符串。
    • 如果返回值 < 0,表示第一个字符串小于第二个字符串。
    • 如果返回值 = 0,表示两个字符串相等。
    • 如果返回值 > 0,表示第一个字符串大于第二个字符串。
  • 原型:int strcmp(const char *str1, const char *str2);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "banana";
    int result = strcmp(str1, str2);
    printf("比较结果: %d\n", result); // 结果为负数
    return 0;
}

运行结果:

bash 复制代码
比较结果: -1

4.2 strncmp

  • 功能:比较指定长度的字符串。
  • 原型:int strncmp(const char *str1, const char *str2, size_t n);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "apricot";
    int result = strncmp(str1, str2, 3); // 比较前三个字符
    printf("比较结果: %d\n", result); // 结果为0
    return 0;
}

运行结果:

bash 复制代码
比较结果: 0

5. 字符串查找函数: strchrstrrchrstrstr

5.1 strchr

  • 功能:查找字符在字符串中首次出现的位置。
  • 原型:char *strchr(const char *str, int c);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    char *pos = strchr(str, 'W');
    if (pos) {
        printf("字符 'W' 的位置: %ld\n", pos - str);
    }
    return 0;
}

运行结果:

bash 复制代码
字符 'W' 的位置: 7

5.2 strrchr

  • 功能:查找字符在字符串中最后一次出现的位置。
  • 原型:char *strrchr(const char *str, int c);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    char *pos = strrchr(str, 'o');
    if (pos) {
        printf("字符 'o' 最后一次出现的位置: %ld\n", pos - str);
    }
    return 0;
}

运行结果:

bash 复制代码
字符 'o' 最后一次出现的位置: 8

5.3 strstr

  • 功能:查找子字符串在字符串中首次出现的位置。
  • 原型:char *strstr(const char *haystack, const char *needle);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    char *pos = strstr(str, "World");
    if (pos) {
        printf("子字符串 'World' 的位置: %ld\n", pos - str);
    }
    return 0;
}

运行结果:

bash 复制代码
子字符串 'World' 的位置: 7

6. 字符串分割函数:strtok

  • 功能:将字符串分割为子字符串(基于分隔符)。
  • 原型:char *strtok(char *str, const char *delim);
  • 注意:strtok 会修改原字符串,并使用内部静态变量保存状态。
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello,World,You";
    char *token = strtok(str, ",");
    while (token != NULL) {
        printf("分割出的子字符串: %s\n", token);
        token = strtok(NULL, ",");
    }
    return 0;
}

运行结果:

bash 复制代码
分割出的子字符串: Hello
分割出的子字符串: World
分割出的子字符串: You

7. 内存操作函数:memcpymemmove

7.1 memcpy

  • 功能:复制指定字节数的数据。
  • 原型:void *memcpy(void *dest, const void *src, size_t n);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello";
    char dest[10];
    memcpy(dest, src, 5);
    dest[5] = '\0'; // 添加字符串结束符
    printf("复制后的字符串: %s\n", dest);
    return 0;
}

运行结果:

bash 复制代码
复制后的字符串: Hello

7.2 memmove

  • 功能:复制指定字节数的数据(支持重叠区域)。
  • 原型:void *memmove(void *dest, const void *src, size_t n);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    memmove(str + 7, str, 5); // 将 "Hello" 移动到 "World" 的位置
    printf("移动后的字符串: %s\n", str);
    return 0;
}

运行结果:

bash 复制代码
移动后的字符串: Hello, Hello!

8. 字符串填充与清空函数:memset

8.1 memset

  • 功能:将指定内存区域填充为某个值。
  • 原型:void *memset(void *s, int c, size_t n);
  • 示例:
c 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[10];
    memset(str, 'A', 5); // 前5个字节填充为 'A'
    str[5] = '\0'; // 添加字符串结束符
    printf("填充后的字符串: %s\n", str);
    return 0;
}

运行结果:

bash 复制代码
填充后的字符串: AAAAA
相关推荐
yannan201903133 分钟前
【数据结构】(Python)差分数组。差分数组与树状数组结合
开发语言·python·算法
WongKyunban1 小时前
Bash Shell知识合集
开发语言·chrome·bash
匿名码客2 小时前
STM32裸机开发转FreeRTOS教程
c语言·stm32·嵌入式硬件
起个随便的昵称2 小时前
安卓入门一 Java基础
android·java·开发语言
重剑无锋10243 小时前
python实现自动登录12306抢票 -- selenium
开发语言·python·selenium
爱干饭的boy3 小时前
教师管理系统
java·开发语言·c++·windows·python·青少年编程
shinelord明3 小时前
【再谈设计模式】策略模式 ~ 算法与行为的灵活调度员
开发语言·数据结构·算法·设计模式·数据分析·软件工程
AI人H哥会Java3 小时前
【Spring】Spring DI(依赖注入)详解—集合类型的注入——List、Set、Map的配置与注入
java·开发语言·后端·spring·架构
幸运的星竹4 小时前
python中os和sys模块的使用
开发语言·python
晚安~~4 小时前
旅游管理系统|Java|SSM|VUE| 前后端分离
java·开发语言·tomcat·maven