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等带长度参数的函数来避免这些问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化数据图表怎么做?如何实现三维数据可视化?

目录 一、三维数据可视化的要点 1. 明确数据可视化的目标 2. 筛选与整理数据 3. 选择合适的图表类型 4. 运用专业工具制作 5. 优化图表的展示效果 二、数据可视化图表怎么做&#xff1f; 1. 理解三维数据的特性 2. 数据处理与三维建模 3. 设置光照与材质效果 4. 添加…

在Linux服务器上部署Jupyter Notebook并实现ssh无密码远程访问

Jupyter notebook版本7.4.2&#xff08;这个版本AI提示我Jupyter7&#xff08;底层是 jupyter_server 2.x&#xff09; 服务器开启服务 安装Jupyter notebook 7.4.2成功后&#xff0c;终端输入 jupyter notebook --generate-config 这将在 ~/.jupyter/ 目录下生成 jupyter_…

走出 Demo,走向现实:DeepSeek-VL 的多模态工程路线图

目录 一、引言&#xff1a;多模态模型的关键转折点 &#xff08;一&#xff09;当前 LMM 的三个关键挑战 1. 数据的真实性不足 2. 模型设计缺乏场景感知 3. 语言能力与视觉能力难以兼顾 &#xff08;二&#xff09;DeepSeek-VL 的根本出发点&#xff1a;以真实任务为锚点…

数据库原理及其应用 第六次作业

题目 参考答案 题目1. 教材P148第1题 问题&#xff1a;什么是数据库的安全性&#xff1f; 答案&#xff1a;数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏 。它通过用户身份鉴别、存取控制&#xff08;包括自主存取控制和强制存取控制&#x…

2025系统架构师---选择题知识点(押题)

1.《计算机信息系统安全保护等级划分准则》(GB 17859-1999)由低到高定义了五个不同级别的计算机系统安全保护能力。 第一级:用户自主保护级---通过隔离用户与数据实现访问控制,保护用户信息安全; 第二级:系统审计保护级---实施更细粒度的访问控制,通过审计和隔离资源确…

Qt操作SQLite数据库教程

Qt 中操作 SQLite 数据库的步骤如下&#xff1a; 1. 添加 SQLite 驱动并打开数据库 #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery>// 创建数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QSQLITE"); db.setData…

从紫光集团看基本财务分析

PE 46PE 代表投资人对他的期望是它的业绩至少要增长50%才算及格。 但实际业绩 一年不如一年. 所以&#xff0c;这个PE 应该是 业绩倒退了&#xff0c;但是市值还没有掉下去&#xff0c;导致运算的结果处在高PE阶段。 那么随着股价的下跌&#xff0c;这个数字会慢慢变小。 当然…

基于MNIST数据集的手写数字识别(CNN)

目录 一&#xff0c;模型训练 1.1 数据集介绍 1.2 CNN模型层结构 1.3 定义CNN模型 1.4 神经网络的前向传播过程 1.5 数据预处理 1.6 加载数据 1.7 初始化 1.8 模型训练过程 1.9 保存模型 二&#xff0c;模型测试 2.1 定义与训练时相同的CNN模型架构 2.2 图像的预处…

centos中postfix的作用

/usr/libexec/postfix/master 是 Postfix 邮件服务器的主进程&#xff0c;qmgr 和 pickup 是 Postfix 的子进程。这些进程本身是正常的&#xff0c;但如果你怀疑服务器被用于钓鱼活动&#xff0c;需要进一步检查 Postfix 的配置和日志&#xff0c;确保它没有被滥用。 1. 检查 P…

蓝牙耳机什么牌子好?倍思值得冲不?

最近总被问“蓝牙耳机什么牌子好”&#xff0c;作为踩过无数坑的资深耳机党&#xff0c;必须安利刚入手的倍思M2s Pro主动降噪蓝牙耳机&#xff01;降噪、音质、颜值全都在线&#xff0c;性价比直接拉满。 -52dB降噪&#xff0c;通勤摸鱼神器 第一次开降噪就被惊到&#xff01…

游戏引擎学习第285天:“Traversables 的事务性占用”

回顾并为当天的工作做准备 我们有一个关于玩家移动的概念&#xff0c;玩家可以在点之间移动&#xff0c;而且当这些点移动时&#xff0c;玩家会随之移动。现在这个部分基本上已经在工作了。我们本来想实现的一个功能是&#xff1a;当玩家移动到某个点时&#xff0c;这个点能“…

java中的包机制

包机制 为了更好地组织类&#xff0c;java提供了包机制&#xff0c;用于区分类名的命名空间 包语句的语法格式为 package pkg1[. pkg2[. pkg3...]]一般利用公司域名倒置作为包名 &#xff1a; 公司域名&#xff1a;www.baidu.com 包名&#xff1a;com.baidu.www 为了能够…

python打卡DAY22

##注入所需库 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import random import numpy as np import time import shap # from sklearn.svm import SVC #支持向量机分类器 # # from sklearn.neighbors import KNeighborsClassifier …

CodeBuddy 开发 JSON 可视化工具实录:JsonVision 的诞生之旅

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 &#x1f9ed; 项目起点&#xff1a;一个灵光一现的念头 在日常的前端开发中&#xff0c;我时常需要调试复杂的…

Redis学习专题(一)配置和持久化

目录 一.配置Redis 1.配置application.properties 2. 配置Config 3.测试连接redis 二、Redis持久化 持久化方案 RDB&#xff1a; 1、RDB基础认识 1、具体流程如下&#xff1a; 3、小结&#xff1a; 3、Fork&Copy-On-Write 4、RDB的配置 5、默认快照的配置 6、…

[ctfshow web入门] web77

信息收集 上一题的读取flag方式不能用了&#xff0c;使用后的回显是&#xff1a;could not find driver 解题 同样的查目录方法 cvar_export(scandir("glob:///*"));die();cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString…

每日算法刷题Day8 5.16:leetcode定长滑动窗口4道题,用时1h

5. 2379.得到k个黑块的最少涂色次数(简单) 2379. 得到 K 个黑块的最少涂色次数 - 力扣&#xff08;LeetCode&#xff09; 思想 1.返回至少出现 一次 连续 k 个黑色块的 最少 操作次数 2.还是定长k&#xff0c;统计量就是把白色变成黑色的操作次数&#xff0c;无需记录当前有…

很啰嗦,再次总结 DOM

DOM (文档对象模型) 详解 一、DOM 基础概念 1. 定义与作用 DOM&#xff08;Document Object Model&#xff09;即文档对象模型&#xff0c;是一种用于 HTML 和 XML 文档的编程接口。它将文档解析为一个由节点和对象组成的树状结构&#xff0c;允许程序和脚本动态访问、修改文…

ES6 (ECMAScript 2015) 详解

文章目录 一、ES6简介1.1 什么是ES6&#xff1f;1.2 为什么要学习ES6&#xff1f;1.3 浏览器支持情况 二、let和const关键字2.1 let关键字2.2 const关键字2.3 var、let和const的选择 三、箭头函数3.1 基本语法3.2 箭头函数的特点3.3 何时使用箭头函数 四、模板字符串4.1 基本语…

LeetCode 746 使用最小花费爬楼梯

当然可以&#xff01;LeetCode 746 是一道经典的动态规划入门题&#xff0c;我来用 C 为你详细解释。 题目描述 给定一个整数数组 cost&#xff0c;其中每个元素 cost[i] 表示从第 i 个台阶向上爬需要支付的费用。一旦支付费用&#xff0c;你可以选择向上爬 1 步 或 2 步。 你…