「C系列」C 字符串及操作字符串的函数

文章目录

  • 一、C 字符串
    • 1. 声明和初始化字符串
    • 2. 访问字符串中的字符
    • 3. 字符串的长度
    • 4. 字符串的复制和连接
    • 5. 字符串的比较
    • 6. 字符串的查找
  • 二、C 操作字符串的函数
  • 三、相关链接

一、C 字符串

在C语言中,字符串是由字符(包括字母、数字、标点符号等)组成的序列,以空字符(null character,即\0)作为结尾。在C语言中,字符串不是一种基本的数据类型,但它们通常存储在字符数组(character array)中。

以下是一些关于C字符串的基本概念和示例:

1. 声明和初始化字符串

你可以使用字符数组来存储字符串:

char str[] = "Hello, World!";
// 或者指定数组的大小(包括结尾的空字符)
char str2[14] = "Hello, World!";

注意,在上面的例子中,数组strstr2会自动包含结尾的空字符\0

2. 访问字符串中的字符

你可以像访问数组中的元素一样访问字符串中的字符:

printf("%c\n", str[0]);  // 输出 'H'

3. 字符串的长度

C标准库提供了strlen函数来计算字符串的长度(不包括结尾的空字符):

#include <string.h>int len = strlen(str);  // len现在为13,因为"Hello, World!"有13个字符(不包括结尾的空字符)

4. 字符串的复制和连接

C标准库中的strcpy函数用于复制一个字符串到另一个字符串:

char dest[20];
strcpy(dest, str);  // 现在dest包含了"Hello, World!"

strcat函数用于连接两个字符串:

char str3[] = "!";
strcat(str, str3);  // 现在str包含了"Hello, World!!"

注意:使用strcpystrcat时要非常小心,因为它们不会检查目标数组是否有足够的空间来存储结果字符串,这可能会导致缓冲区溢出。为了避免这种情况,你可以使用更安全的函数,如strncpystrncat

5. 字符串的比较

C标准库中的strcmp函数用于比较两个字符串:

int result = strcmp(str, "Hello, World!");  // result现在为0,因为两个字符串相等

strcmp`函数返回的值是一个整数,表示两个字符串的字典顺序关系。如果返回值小于0,则第一个字符串在字典顺序上小于第二个字符串;如果返回值大于0,则第一个字符串在字典顺序上大于第二个字符串;如果返回值等于0,则两个字符串相等。

6. 字符串的查找

C标准库中的strstr函数用于在一个字符串中查找另一个字符串的首次出现:

char *pos = strstr(str, "World");  // pos现在指向str中"World"的起始位置,或者如果找不到则为NULL

二、C 操作字符串的函数

在 C 语言中,处理字符串通常涉及到一系列标准库函数,这些函数定义在 <string.h> 头文件中。以下是一些常用的 C 语言字符串操作函数:

  1. 字符串长度
  • size_t strlen(const char *str);
    返回字符串 str 的长度(不包括结尾的空字符 '\0')。
  1. 字符串复制
  • char *strcpy(char *dest, const char *src);
    将字符串 src 复制到 dest 所指向的位置,包括结尾的空字符。
  • char *strncpy(char *dest, const char *src, size_t n);
    将字符串 src 的前 n 个字符复制到 dest 所指向的位置,但不会添加空字符(除非 src 的长度小于 n)。
  1. 字符串连接
  • char *strcat(char *dest, const char *src);
    将字符串 src 添加到 dest 字符串的末尾,包括两个字符串末尾的空字符。
  • char *strncat(char *dest, const char *src, size_t n);
    将字符串 src 的前 n 个字符添加到 dest 字符串的末尾,确保 dest 字符串以空字符结尾。
  1. 字符串比较
  • int strcmp(const char *str1, const char *str2);
    比较两个字符串。如果 str1 小于 str2,则返回负值;如果相等,则返回 0;如果 str1 大于 str2,则返回正值。
  • int strncmp(const char *str1, const char *str2, size_t n);
    比较两个字符串的前 n 个字符。
  1. 字符串查找
  • char *strstr(const char *haystack, const char *needle);
    haystack 字符串中查找 needle 字符串首次出现的位置。如果找到,返回指向首次出现位置的指针;否则返回 NULL
  1. 字符串分割
  • C 标准库没有直接的字符串分割函数,但可以使用 strtok 函数:
    • char *strtok(char *str, const char *delim);
      str 字符串中查找由 delim 指定的分隔符,并返回指向第一个标记的指针。这个函数通常与 NULL 一起使用,以便在后续调用中继续查找剩余标记。
  1. 字符串大小写转换
  • C 标准库没有直接的字符串大小写转换函数,但可以使用 touppertolower 函数逐个字符转换:
    • int toupper(int c);
      如果 c 是小写字母,则返回对应的大写字母;否则返回 c
    • int tolower(int c);
      如果 c 是大写字母,则返回对应的小写字母;否则返回 c
  1. 内存设置
  • void *memset(void *str, int c, size_t n);
    str 所指向的内存区域的前 n 个字节设置为 c 的值。这通常用于初始化字符串或设置特定值。
  1. 内存移动和复制
  • void *memmove(void *dest, const void *src, size_t n);
    src 所指向的内存区域复制 n 个字节到 dest 所指向的内存区域。与 memcpy 不同,memmove 可以处理源区域和目标区域重叠的情况。
  • void *memcpy(void *dest, const void *src, size_t n);
    src 所指向的内存区域复制 n 个字节到 dest 所指向的内存区域。

三、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C系列」C 简介
  4. 「C系列」C 基本语法
  5. 「C系列」C 数据类型
  6. 「C系列」C 变量及常见问题梳理
  7. 「C系列」C 常量
  8. 「C系列」C 存储类
  9. 「C系列」C 运算符
  10. 「C系列」C 判断/循环
  11. 「C系列」C 函数
  12. 「C系列」C 作用域规则
  13. 「C系列」C 数组
  14. 「C系列」C enum(枚举)
  15. 「C系列」C 指针及其应用案例

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

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

相关文章

深入理解 JVM 的几种常见垃圾回收算法

在线工具站 推荐一个程序员在线工具站&#xff1a;程序员常用工具&#xff08;http://cxytools.com&#xff09;&#xff0c;有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具&#xff0c;效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站&#xff1a;…

Django DeleteView视图

Django 的 DeleteView 是一个基于类的视图&#xff0c;用于处理对象的删除操作。 1&#xff0c;添加视图函数 Test/app3/views.py from django.shortcuts import render# Create your views here. from .models import Bookfrom django.views.generic import ListView class B…

信息科学与工程学院第五届大学生程序设计竞赛——热身赛

A:X星人的地盘 题目描述 一天&#xff0c;X星人和Y星人在一张矩形地图上玩抢地盘的游戏。 X星人每抢到一块地&#xff0c;在地图对应的位置标记一个“X”&#xff1b;Y星人每抢到一块地&#xff0c;在地图对应的位置标记一个“Y”&#xff1b;如果某一块地无法确定其归属则标记…

2024050901-重学 Java 设计模式《实战访问者模式》

重学 Java 设计模式&#xff1a;实战访问者模式「模拟家长与校长&#xff0c;对学生和老师的不同视角信息的访问场景」 一、前言 能力&#xff0c;是你前行的最大保障 年龄会不断的增长&#xff0c;但是什么才能让你不慌张。一定是能力&#xff0c;即使是在一个看似还很安稳…

Web后端开发的学习

REST风格 GET:查询用户POST:新增用户POT:修改用户DELETE:删除用户 前后端交互统一的响应结果 记录日志 SLf4j 注解&#xff1a; PathVariable&#xff1a;获取路径的参数ResponseBody :方法的返回值直接作为 HTTP 响应的正文返回,将响应的实体类转为json发送给前端Request…

svm 超参数

https://www.cnblogs.com/ChevisZhang/p/12932674.html https://wenku.baidu.com/view/b8a2c73cfd4733687e21af45b307e87100f6f861.html?wkts1718332423081&bdQuerysvm%E7%9A%84%E8%B6%85%E5%8F%82%E6%95%B0 用交叉验证找到最好的参数 C 和γ 。使用 RBF 核时&#xff0c…

【RabbitMQ】RabbitMQ 的 6 种工作模式

RabbitMQ 的 6 种工作模式 1.简单模式2.工作队列模式3.交换机模式4.Routing 转发模式5.主题转发模式6.RPC 模式6.1 消息属性6.2 关联标识6.3 工作流程 7.小结 1.简单模式 生产者把消息放入队列&#xff0c;消费者获得消息&#xff0c;如下图所示。这个模式只有 一个消费者、一…

v8中使用TensorBoard进行训练可视化(可用于论文)(补充版,接上一篇文章)

我们可以边训练&#xff0c;边通过TensorBoard观察损失函数的变化&#xff0c;同时也可以通过TensorBoard去查看整体网络yaml结构&#xff0c;不再需要人工根据yaml去画网络结构了。 训练v8的时候&#xff0c;重新打开新的终端&#xff1a; 虚拟环境下输入并执行&#xff1a;&…

redis序列化

文章目录 1、为什么要进行序列化操作&#xff1f;2、序列化方式2.1、自定义序列化2. 2、StringRedisTemplate&#xff08;重点&#xff09; 1、为什么要进行序列化操作&#xff1f; 不进行序列化向redis存入数据代码&#xff1a; SpringBootTest class RedisDemoApplicationT…

C++格式化输出时间

前言 使用time函数、tm结构体、local函数、put_time函数实现格式化输出时间。 形如[2024-06-14 18:19:14] 格式化时间代码实现 void Print_Time() {// 获取当前时间戳time_t now_time time(nullptr);// 将time_t 转换为tm结构std::tm* local localtime(&now_time);// 格…

日常销售数据分析为什么重要?三个维度全面分析日常销售数据

在当今电子商务的浪潮席卷全球的时代&#xff0c;网店如雨后春笋般涌现&#xff0c;并且竞争日趋激烈。在这样一个充满挑战与机遇的环境中&#xff0c;如何洞察市场动向&#xff0c;把握消费者需求&#xff0c;实现销售业绩的稳步增长&#xff0c;成为每一位电商运营者必须面对…

查看ubuntu中的分区是什么类型的

sudo file -sL /dev/sda1#输出 /dev/sda1: Linux rev 1.0 ext4 filesystem data ...使用 lsblk 或 fdisk 列出所有分区&#xff0c;确认你需要恢复文件的分区路径。 lsblksudo fdisk -l输出会显示所有磁盘和分区信息。确保你选择了正确的分区。例如&#xff1a; /dev/sda1 2…

【YOLOv8改进[注意力]】在YOLOv8中添加GAM注意力 + 含全部代码和详细修改方式 + 手撕结构图

本文将进行在YOLOv8中添加GAM注意力的实践,助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法,实现有效涨点。 改进前和改进后的参数对比: 目录 一 GAM 二 在YOLOv8中添加GAM注意力 1 整体修改 2 配置文件

M41T11M6F串行实时时钟-国产兼容RS4C411

RS4C411是一款低功耗串行实时时钟&#xff08;RTC&#xff09;&#xff0c;具有56字节的NVRAM。内置32.768 kHz振荡器&#xff08;外部晶体控制&#xff09;和RAM的前8字节用于时钟/日历功能&#xff0c;并以二进制编码十进制&#xff08;BCD&#xff09;格式配置。地址和数据通…

MacOS下如何使用Tomcat

提示&#xff1a;宝子们&#xff0c;希望文章对你们有所帮助&#xff0c; 请一键三连支持博主下吧&#xff5e; 文章目录 前言一、Tomcat 压缩版二、Tomcat可执行文件版本最后 前言 电脑环境&#xff1a; MacOS Monterey 版本 12.6.8 Apple M1 Tomcat 9.0.83 Java 1.8.0_171 …

【机器学习】使用BART技术自动提取文章内容摘要

1. 引言 1.1 认识BART 人工智能中的BART是一个预训练的序列到序列模型&#xff0c;全称为“Bidirectional and Auto-Regressive Transformers”&#xff0c;即“兼有双向语言建模和自回归机制的Transformer”&#xff1a; 模型架构&#xff1a; - BART继承了Transformer的标准…

UHF和VHF的区别

UHF和VHF的区别 众所周知&#xff1a;UHF和VHF都是频段的名称&#xff0c;他们分别代表着不同的频段&#xff0c;UHF代表超高频&#xff08;300MHz ~3GHz&#xff09;&#xff0c;VHF(30MHz ~ 300MHz&#xff09;代表甚高频&#xff1b; 1、频率范围不同 UHF代表超高频&#x…

滚珠丝杆与梯形丝杆的工作原理与性能差异!

滚珠丝杆和梯形丝杆&#xff08;也称滑动丝杆&#xff09;都是机械设备中常见的两种精密传动元件&#xff0c;两者都是将旋转运动变成直线运动的方式。那么&#xff0c;这两者有什么区别呢&#xff1f;在什么时候选择使用滚珠丝杆&#xff1f;什么时候选用滑动丝杆呢&#xff1…

Petalinux由于网络原因产生的编译错误(3)-qemu-xilinx-system-native 失败

1 获取qemu-xilinx-system-native 失败 编译时遇到qemu-xilinx-system-native 包获取失败&#xff0c;如下图所示&#xff1a; 解决这种错误方法如下&#xff1a; 进入Petalinux 工程&#xff0c;编辑工程下的 project-spec/meta-user/conf/petalinuxbsp.conf 文件&#xff0…

CorelDRAW2024专业版永久免费激活码序列号分享大全

亲爱的设计师们&#xff0c;你们是否有过这样的困扰&#xff1a;想要设计出独具特色的图形作品&#xff0c;但又受限于软件的功能和操作复杂性&#xff1f;今天&#xff0c;我要为大家种草一款神器——CorelDRAW 2024&#xff01;&#x1f389;✨ 作为一个长期使用这款软件的图…