当前位置: 首页 > news >正文

C语言中字符串函数的详细讲解

C语言提供了丰富的字符串处理函数,这些函数在<string.h>头文件中声明。以下是一些常用字符串函数的详细讲解:

字符串拷贝函数

  • strcpy

    • 功能:将源字符串(包括结尾的'\0')复制到目标字符串。
    • 原型char *strcpy(char *dest, const char *src);
    • 参数dest目标字符串,src源字符串。
    • 返回值:返回指向目标字符串的指针。
    • 示例
      char src[] = "Hello";
      char dest[10];
      strcpy(dest, src);
      printf("%s\n", dest); // 输出 "Hello"
      
  • strncpy

    • 功能:最多复制n个字符从源字符串到目标字符串。如果源字符串长度小于n,则目标字符串的剩余部分将用'\0'填充。
    • 原型char *strncpy(char *dest, const char *src, size_t n);
    • 参数dest目标字符串,src源字符串,n要复制的最大字符数。
    • 返回值:返回指向目标字符串的指针。
    • 示例
      char src[] = "Hello";
      char dest[10];
      strncpy(dest, src, 3);
      printf("%s\n", dest); // 输出 "Hel"
      

字符串连接函数

  • strcat

    • 功能:将源字符串(包括结尾的'\0')连接到目标字符串的末尾。
    • 原型char *strcat(char *dest, const char *src);
    • 参数dest目标字符串,src源字符串。
    • 返回值:返回指向目标字符串的指针。
    • 示例
      char dest[50] = "Hello, ";
      char src[] = "World!";
      strcat(dest, src);
      printf("%s\n", dest); // 输出 "Hello, World!"
      
  • strncat

    • 功能:最多连接n个字符从源字符串到目标字符串。
    • 原型char *strncat(char *dest, const char *src, size_t n);
    • 参数dest目标字符串,src源字符串,n要连接的最大字符数。
    • 返回值:返回指向目标字符串的指针。
    • 示例
      char dest[50] = "Hello, ";
      char src[] = "World!";
      strncat(dest, src, 3);
      printf("%s\n", dest); // 输出 "Hello, Wor"
      

字符串比较函数

  • strcmp

    • 功能:比较两个字符串,区分大小写。
    • 原型int strcmp(const char *str1, const char *str2);
    • 参数str1第一个字符串,str2第二个字符串。
    • 返回值
      • 如果返回值小于0,表示str1小于str2
      • 如果返回值等于0,表示str1str2相等
      • 如果返回值大于0,表示str1大于str2
    • 示例
      char str1[] = "abc";
      char str2[] = "abd";
      int result = strcmp(str1, str2);
      if (result < 0) {printf("%s 小于 %s\n", str1, str2);
      } else if (result == 0) {printf("%s 等于 %s\n", str1, str2);
      } else {printf("%s 大于 %s\n", str1, str2);
      }
      
  • strncmp

    • 功能:最多比较n个字符。
    • 原型int strncmp(const char *str1, const char *str2, size_t n);
    • 参数str1第一个字符串,str2第二个字符串,n要比较的最大字符数。
    • 返回值:与strcmp相同。
    • 示例
      char str1[] = "abcdef";
      char str2[] = "abcxyz";
      int result = strncmp(str1, str2, 3);
      if (result == 0) {printf("前3个字符相等\n");
      }
      

字符串长度函数

  • strlen
    • 功能:计算字符串的长度(不包括结尾的'\0')。
    • 原型size_t strlen(const char *str);
    • 参数str要计算长度的字符串。
    • 返回值:返回字符串的长度。
    • 示例
      char str[] = "Hello, World!";
      size_t len = strlen(str);
      printf("字符串长度:%zu\n", len); // 输出 "字符串长度:13"
      

字符串查找函数

  • strchr

    • 功能:在字符串中查找首次出现的指定字符。
    • 原型char *strchr(const char *str, int c);
    • 参数str要查找的字符串,c要查找的字符。
    • 返回值:找到则返回指向该字符的指针,否则返回NULL
    • 示例
      char str[] = "Hello, World!";
      char *p = strchr(str, 'o');
      if (p != NULL) {printf("字符 'o' 在位置:%ld\n", p - str); // 输出 "字符 'o' 在位置:4"
      }
      
  • strrchr

    • 功能:在字符串中查找最后一次出现的指定字符。
    • 原型char *strrchr(const char *str, int c);
    • 参数str要查找的字符串,c要查找的字符。
    • 返回值:找到则返回指向该字符的指针,否则返回NULL
    • 示例
      char str[] = "Hello, World!";
      char *p = strrchr(str, 'o');
      if (p != NULL) {printf("字符 'o' 最后出现的位置:%ld\n", p - str); // 输出 "字符 'o' 最后出现的位置:7"
      }
      
  • strstr

    • 功能:在字符串中查找首次出现的子字符串。
    • 原型char *strstr(const char *haystack, const char *needle);
    • 参数haystack要查找的主字符串,needle要查找的子字符串。
    • 返回值:找到则返回指向子字符串首次出现位置的指针,否则返回NULL
    • 示例
      char haystack[] = "Hello, World!";
      char needle[] = "World";
      char *p = strstr(haystack, needle);
      if (p != NULL) {printf("子字符串 '%s' 在位置:%ld\n", needle, p - haystack); // 输出 "子字符串 'World' 在位置:7"
      }
      

字符串分割函数

  • strtok
    • 功能:根据指定的分隔符将字符串分割成子字符串。
    • 原型char *strtok(char *str, const char *delim);
    • 参数str要分割的字符串,delim分隔符字符串。
    • 返回值:返回指向下一个子字符串的指针,如果分割完成则返回NULL
    • 示例
      char str[] = "Hello, World! This is C.";
      char *token = strtok(str, " ,!."); // 分隔符为 ' ', ',', '!' 和 '.'
      while (token != NULL) {printf("%s\n", token);token = strtok(NULL, " ,!."); // 后续调用传入NULL
      }
      // 输出:
      // Hello
      // World
      // This
      // is
      // C
      

字符串转换函数

  • atoi

    • 功能:将字符串转换为整数。
    • 原型int atoi(const char *str);
    • 参数str要转换的字符串。
    • 返回值:返回转换后的整数值。
    • 示例
      char str[] = "12345";
      int num = atoi(str);
      printf("转换后的整数:%d\n", num); // 输出 "转换后的整数:12345"
      
  • atof

    • 功能:将字符串转换为浮点数。
    • 原型double atof(const char *str);
    • 参数str要转换的字符串。
    • 返回值:返回转换后的浮点数值。
    • 示例
      char str[] = "123.45";
      double num = atof(str);
      printf("转换后的浮点数:%.2f\n", num); // 输出 "转换后的浮点数:123.45"
      
  • itoa(非标准)

    • 功能:将整数转换为字符串。
    • 原型char *itoa(int value, char *str, int radix);
    • 参数value要转换的整数,str存储结果的字符串,radix进制(如10表示十进制)。
    • 返回值:返回指向存储结果的字符串的指针。
    • 示例
      int num = 12345;
      char str[20];
      itoa(num, str, 10);
      printf("转换后的字符串:%s\n", str); // 输出 "转换后的字符串:12345"
      

这些函数提供了强大的字符串操作能力,熟练掌握它们可以让你更高效地处理字符串相关的任务。在使用这些函数时,要注意它们的安全性,例如strcpystrcat可能导致缓冲区溢出,可以通过使用strncpystrncat等带长度参数的函数来避免这些问题。

相关文章:

  • 【软考 程序流程图的测试方法】McCabe度量法计算环路复杂度
  • 无线信道的噪声与干扰
  • 恢复因 oh-my-zsh 安装导致丢失的 zsh 环境变量
  • Python自学笔记3 常见运算符
  • C语言:在 Win 10 上,gcc 如何编译 gtk 应用程序
  • 【VSCode】快捷键合集(持续更新~)
  • python3GUI--多功能WiFi网络工具箱 By:PyQt5(详细分享)
  • 如何根据竞价数据判断竞价强度,是否抢筹等
  • LLM-Based Agent综述及其框架学习(五)
  • FreeCAD源码分析: Transaction实现原理
  • 安全性(一):加密算法总结
  • 技术测评:小型单文件加密工具的功能解析
  • 第五项修炼:打造学习型组织
  • 深度学习中ONNX格式的模型文件
  • 深入探讨 Java Switch Expressions
  • day33-网络编程
  • 操作系统学习笔记第4章 (竟成)
  • 小型气象站应用之鱼塘养殖方案
  • 中国30米年度土地覆盖数据集及其动态变化(1985-2022年)
  • 【AI论文】EnerVerse-AC:用行动条件来构想具身环境
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开“无条件谈判”
  • 大风+暴雨,中央气象台双预警齐发
  • 新华每日电讯:博物馆正以可亲可近替代“高冷范儿”
  • 小米汽车回应部分SU7前保险杠形变
  • 气急败坏!20多名台湾艺人被台当局列为“重点核查对象”
  • 海外考古大家访谈|冈村秀典:礼制的形成与早期中国