C语言实例_string.h库函数功能及其用法详解

一、前言

在计算机编程中,字符串处理是一项常见而重要的任务。C语言的string.h头文件提供了一系列函数和工具,用于对字符串进行操作和处理。这些函数包括字符串复制、连接、比较、查找等功能,为开发人员提供了强大的字符串处理能力。本文将对string.h头文件中的所有函数进行全面介绍,包括它们的功能和使用方法,以帮助大家更好地理解和利用该头文件。

二、函数介绍

下面是对每个函数的详细介绍及其功能。

【1】strlen(const char *str)

  • 功能:计算字符串的长度,即字符串中字符的个数,不包括字符串结束符'\0'。
  • 返回值:无符号整数,表示字符串的长度。

【2】strcpy(char *dest, const char *src)

  • 功能:将源字符串复制到目标字符串中,包括字符串结束符'\0'。
  • 返回值:指向目标字符串的指针。

【3】strncpy(char *dest, const char *src, size_t n)

  • 功能:将源字符串的前n个字符复制到目标字符串中,包括字符串结束符'\0'。如果源字符串长度不足n,则在目标字符串末尾填充'\0'。
  • 返回值:指向目标字符串的指针。

【4】strcat(char *dest, const char *src)

  • 功能:将源字符串连接到目标字符串的末尾,包括字符串结束符'\0'。
  • 返回值:指向目标字符串的指针。

【5】strncat(char *dest, const char *src, size_t n)

  • 功能:将源字符串的前n个字符连接到目标字符串的末尾,包括字符串结束符'\0'。如果源字符串长度不足n,则在目标字符串末尾填充'\0'。
  • 返回值:指向目标字符串的指针。

【6】strcmp(const char *str1, const char *str2)

  • 功能:比较两个字符串的大小关系。
  • 返回值:整数值,当str1小于str2时返回负数,当str1等于str2时返回0,当str1大于str2时返回正数。

【7】strncmp(const char *str1, const char *str2, size_t n)

  • 功能:比较两个字符串的前n个字符的大小关系。
  • 返回值:整数值,当str1小于str2时返回负数,当str1等于str2时返回0,当str1大于str2时返回正数。

【8】strchr(const char *str, int c)

  • 功能:在字符串中查找第一次出现指定字符c的位置。
  • 返回值:指向第一次出现指定字符的指针,如果未找到则返回NULL。

【9】strrchr(const char *str, int c)

  • 功能:在字符串中查找最后一次出现指定字符c的位置。
  • 返回值:指向最后一次出现指定字符的指针,如果未找到则返回NULL。

【10】strstr(const char *haystack, const char *needle)

  • 功能:在字符串haystack中查找第一次出现子字符串needle的位置。
  • 返回值:指向第一次出现子字符串的指针,如果未找到则返回NULL。

【11】strtok(char *str, const char *delim)

  • 功能:将字符串分割为一系列子字符串,使用delim中的字符作为分隔符。
  • 返回值:指向分割得到的子字符串的指针,如果字符串已经被完全分割,则返回NULL。

【12】memset(void *ptr, int value, size_t num)

  • 功能:将指定的内存块(由ptr指向)的前num个字节都设置为特定值value。
  • 返回值:指向内存块的指针。

【13】memcpy(void *dest, const void *src, size_t num)

  • 功能:将源内存块(由src指向)的前num个字节复制到目标内存块(由dest指向)中。
  • 返回值:指向目标内存块的指针。

【14】memmove(void *dest, const void *src, size_t num)

  • 功能:将源内存块(由src指向)的前num个字节复制到目标内存块(由dest指向)中,可以处理内存块的重叠。
  • 返回值:指向目标内存由于回答的字符数限制,无法一次性提供完整的函数介绍。以下是续写部分:

【15】memcmp(const void *ptr1, const void *ptr2, size_t num)

  • 功能:比较两个内存块的前num个字节的大小关系。
  • 返回值:整数值,当ptr1小于ptr2时返回负数,当ptr1等于ptr2时返回0,当ptr1大于ptr2时返回正数。

【16】memchr(const void *ptr, int value, size_t num)

  • 功能:在内存块中查找第一次出现指定值value的位置。
  • 返回值:指向第一次出现指定值的指针,如果未找到则返回NULL。

【17】memmove_s(void *dest, rsize_t destsz, const void *src, rsize_t count)

  • 功能:将源内存块(由src指向)的前count个字节复制到目标内存块(由dest指向)中,可以处理内存块的重叠。确保目标内存块的大小为destsz。
  • 返回值:错误码,0表示成功,非零值表示失败。

三、代码示例

以下是对每个函数的用法示例:

【1】strlen(const char *str):

cpp 复制代码
#include <stdio.h>
#include <string.h>
​
int main() {
    const char *str = "Hello, world!";
    int length = strlen(str);
    printf("The length of the string is: %d\n", length);
    return 0;
}

【2】strcpy(char *dest, const char *src):

cpp 复制代码
#include <stdio.h>
#include <string.h>
​
int main() {
    char dest[20];
    const char *src = "Hello, world!";
    strcpy(dest, src);
    printf("The copied string is: %s\n", dest);
    return 0;
}

【3】strncpy(char *dest, const char *src, size_t n):

cpp 复制代码
#include <stdio.h>
#include <string.h>
​
int main() {
    char dest[20];
    const char *src = "Hello, world!";
    strncpy(dest, src, 5);
    dest[5] = '\0';  // Ensure null-termination
    printf("The copied string is: %s\n", dest);
    return 0;
}

【4】strcat(char *dest, const char *src):

cpp 复制代码
#include <stdio.h>
#include <string.h>
​
int main() {
    char dest[20] = "Hello";
    const char *src = ", world!";
    strcat(dest, src);
    printf("The concatenated string is: %s\n", dest);
    return 0;
}

【5】strncat(char *dest, const char *src, size_t n):

cpp 复制代码
#include <stdio.h>
#include <string.h>
​
int main() {
    char dest[20] = "Hello";
    const char *src = ", world!";
    strncat(dest, src, 3);
    dest[8] = '\0';  // Ensure null-termination
    printf("The concatenated string is: %s\n", dest);
    return 0;
}

【6】strcmp(const char *str1, const char *str2):

cpp 复制代码
#include <stdio.h>
#include <string.h>
​
int main() {
    const char *str1 = "apple";
    const char *str2 = "banana";
    int result = strcmp(str1, str2);
    if (result < 0) {
        printf("str1 is less than str2\n");
    } else if (result > 0) {
        printf("str1 is greater than str2\n");
    } else {
        printf("str1 is equal to str2\n");
    }
    return 0;
}

【7】strncmp(const char *str1, const char *str2, size_t n):

cpp 复制代码
#include <stdio.h>
#include <string.h>
​
int main() {
    const char *str1 = "apple";
    const char *str2 = "application";
    int result = strncmp(str1, str2, 3);
    if (result < 0) {
        printf("str1 is less than str2\n");
    } else if (result > 0) {
        printf("str1 is greater than str2\n");
    } else {
        printf("str1 is equal to str2\n");
    }
    return 0;
}

【8】strchr(const char *str, int c):

cpp 复制代码
#include <stdio.h>
#include <string.h>
​
int main() {
    const char *str = "Hello, world!";
    char *ptr = strchr(str, 'o');
    if (ptr != NULL) {
        printf("The first occurrence of 'o' is at index: %ld\n", ptr - str);
    } else {
        printf("The character 'o' is not found\n");
    }
    return 0;
}

【9】strrchr(const char *str, int c):

arduino 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    const char *str = "Hello, world!";
    char *ptr = strrchr(str, 'o');
    if (ptr != NULL) {
        printf("The last occurrence of 'o' is at index: %ld\n", ptr - str);
    } else {
        printf("The character 'o' is not found\n");
    }
    return 0;
}

【10】strstr(const char *haystack, const char *needle):

cpp 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    const char *haystack = "Hello, world!";
    const char *needle = "world";
    char *ptr = strstr(haystack, needle);
    if (ptr != NULL) {
        printf("The substring '%s' is found at index: %ld\n", needle, ptr - haystack);
    } else {
        printf("The substring '%s' is not found\n", needle);
    }
    return 0;
}
相关推荐
zopple16 小时前
常见的 Spring 项目目录结构
java·后端·spring
cjy00011118 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本19 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji341619 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan19 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer21 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor35621 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor35621 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer21 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP1 天前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪