C语言字符串处理

在 C 语言中,字符串是以字符数组的形式表示的,以空字符 '\0' 结尾。C 语言提供了一系列的字符串处理函数,可以用于字符串的操作、查找、比较等。以下是一些常用的 C 语言字符串处理函数:

1. 字符串定义与初始化

#include <stdio.h>
#include <string.h>int main() {// 字符数组表示字符串char str1[10] = "Hello";char str2[] = {'W', 'o', 'r', 'l', 'd', '\0'};// 字符串常量char *str3 = "C Programming";printf("str1: %s\n", str1);printf("str2: %s\n", str2);printf("str3: %s\n", str3);return 0;
}

2. 字符串长度

#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello, World!";int len = strlen(str);printf("Length of str: %d\n", len);return 0;
}

3. 字符串拷贝

#include <stdio.h>
#include <string.h>int main() {char source[] = "Hello, World!";char destination[20];// 使用 strcpy 进行拷贝strcpy(destination, source);printf("Source: %s\n", source);printf("Destination: %s\n", destination);return 0;
}

4. 字符串连接

#include <stdio.h>
#include <string.h>int main() {char str1[] = "Hello, ";char str2[] = "World!";// 使用 strcat 进行连接strcat(str1, str2);printf("Concatenated string: %s\n", str1);return 0;
}

5. 字符串比较

#include <stdio.h>
#include <string.h>int main() {char str1[] = "apple";char str2[] = "banana";// 使用 strcmp 进行比较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;
}

6. 字符串查找

#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello, World!";char *ptr;// 使用 strstr 进行查找ptr = strstr(str, "World");if (ptr != NULL) {printf("Substring found at position: %ld\n", ptr - str);} else {printf("Substring not found\n");}return 0;
}

7. 字符串分割

C 语言本身不提供直接的字符串分割函数,但可以使用 strtok 函数来实现字符串分割。

#include <stdio.h>
#include <string.h>int main() {char str[] = "apple,orange,banana";char *token;// 使用 strtok 进行分割token = strtok(str, ",");while (token != NULL) {printf("Token: %s\n", token);token = strtok(NULL, ",");}return 0;
}

8. 字符串转换

字符串转整数

使用 atoistrtol 函数将字符串转换为整数。

#include <stdio.h>
#include <stdlib.h>int main() {char str[] = "12345";int num1 = atoi(str);// 或者使用 strtolchar *endptr;long num2 = strtol(str, &endptr, 10);printf("Converted Integer (atoi): %d\n", num1);printf("Converted Integer (strtol): %ld\n", num2);return 0;
}
整数转字符串

使用 sprintfsnprintf 函数将整数转换为字符串。

#include <stdio.h>int main() {int num = 12345;char str1[20];char str2[20];// 使用 sprintfsprintf(str1, "%d", num);// 或者使用 snprintfsnprintf(str2, sizeof(str2), "%d", num);printf("Converted String (sprintf): %s\n", str1);printf("Converted String (snprintf): %s\n", str2);return 0;
}

9. 字符串操作的安全性考虑

在进行字符串操作时,要注意防止缓冲区溢出和安全漏洞。推荐使用带有长度参数的安全版本函数。

  • strncpy 替代 strcpy
  • strncat 替代 strcat
  • strncmp 替代 strcmp
#include <stdio.h>
#include <string.h>int main() {char dest[10] = "Hello";char src[] = "World";// 使用 strncpy 避免缓冲区溢出strncpy(dest, src, sizeof(dest) - 1);dest[sizeof(dest) - 1] = '\0';printf("Safe Concatenation: %s\n", dest);return 0;
}

10. 动态内存分配和释放字符串

使用 mallocfree 进行字符串的动态内存分配和释放。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() {char *str;// 动态分配内存str = (char *)malloc(20);if (str == NULL) {perror("Memory allocation failed");exit(EXIT_FAILURE);}// 操作字符串strcpy(str, "Dynamic Memory");// 使用字符串// 释放内存free(str);return 0;
}

在实际的 C 语言编程中,字符串处理是非常常见的任务之一。除了上述介绍的函数外,还有许多其他字符串处理函数,开发者可以根据具体需求选择合适的函数进行使用。

      👇👇👇👇点击最下方名片: Linux兵工厂,免费领取Linux硬核学习资料👇👇👇👇

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

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

相关文章

【数据结构】链表OJ面试题4《返回链表入环的第一个结点》(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 给定一个链表&#xff0c;判断链表中是否有环。http://t.csdnimg.cn/Rcdyc 记录每天的刷题&#xff0c;继续坚持&#xff01; 2.OJ题目训练 10. 给定一个链表&#xff0c;返回链表开始…

golang集成sentry: go-redis

网上没有找到go-redis集成sentry的库&#xff0c; 所以我简单实现了一个 代码&#xff1a; https://github.com/Shujie-Tan/go-redis-sentry 使用方法&#xff1a; import (redis_sentry "github.com/Shujie-Tan/go-redis-sentry" ) rdb : redis.NewClient(&re…

如何一键启动、停止或重启运行在服务器内的幻兽帕鲁游戏服务进程?

如果你是用腾讯云轻量应用服务器一键部署的幻兽帕鲁服务器&#xff0c;那么可以在面板一键启动、停止或重启运行在服务器内的幻兽帕鲁游戏服务进程&#xff08;注意并非对服务器整机进行操作&#xff09;&#xff0c;无需手动在服务器内部运行命令。 详细教程地址&#xff1a;h…

Xubuntu16.04系统中修改系统语言和系统时间

1.修改系统语言 问题&#xff1a;下图显示系统语言不对 查看系统中可用的所有区域设置的命令 locale -a修改/etc/default/locale文件 修改后如下&#xff1a; # File generated by update-locale LANG"en_US.UTF-8" LANGUAGE"en_US:en"LANG"en_US…

高中数学:不等式

一、性质 1、同向可加性 2、同向同正可乘 3、正数乘方开方&#xff08;n∈Z&#xff0c;n≥2&#xff09; 常见题型 1、比较大小 分式比较大小&#xff0c;先去分母作差法比较大小带根号的无理数比较大小&#xff0c;直接两边开方因式分解&#xff08;较难&#xff09; 2、…

TiDB分布式关系型数据库简介

目录 1.关于TiDB2.TiDB的整体架构3.使用场景4. TiDB VS MySQL5.参考本文主要介绍TiDB架构以及使用场景。 1.关于TiDB TiDB 是由 PingCAP 公司开源的一款分布式关系型数据库,它支持水平扩展、强一致性和高可用性。TiDB 兼容 MySQL 协议,可以无缝替代 MySQL,特别适合处理大规…

Java17之使用Lambda表达式对对象集合中指定的字段进行排序

Java17之使用Lambda表达式对对象集合中指定的字段进行排序 文章目录 Java17之使用Lambda表达式对对象集合中指定的字段进行排序1. 集合对象排序1. Java实体类2. 正序排序3.倒序排序 1. 集合对象排序 Java8起可用 List 的 sort 方法进行排序&#xff0c;形参为函数式接口Compara…

C#利用接口实现选择不同的语种

目录 一、涉及到的知识点 1.接口定义 2.接口具有的特征 3.接口通过类继承来实现 4.有效使用接口进行组件编程 5.Encoding.GetBytes(String)方法 &#xff08;1&#xff09;检查给定字符串中是否包含中文字符 &#xff08;2&#xff09;编码和还原前后 6.Encoding.GetS…

【算法】字符串-洛谷

文章目录 P5015 [NOIP2018 普及组] 标题统计P5734 【深基6.例6】文字处理软件 P5015 [NOIP2018 普及组] 标题统计 NOIP2018 普及组] 标题统计 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 在怎么读取数据输入的问题上纠结了很久。 本来想用cin>>x的形式一个字符一个…

netstat命令

netstat 是一个计算机网络命令行工具&#xff0c;用于显示网络连接、路由表和网络接口等网络相关信息。netstat 命令可以在各种操作系统上使用&#xff0c;包括 Windows、Linux 和 macOS 等。 在使用 netstat 命令时&#xff0c;可以提供不同的选项来显示不同类型的网络信息。…

猫头虎分享已解决Bug || Invariant Violation in React: Element Type is Invalid ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【Web】NSSCTF Round#18 Basic个人wp(未完待续)

①门酱想玩什么呢&#xff1f; 先试一下随便给个链接 不能访问远程链接&#xff0c;结合评论区功能&#xff0c;不难联想到xss&#xff0c;只要给个评论区链接让门酱访问就可 我们研究下评论区 从评论区知道&#xff0c;要让门酱玩元梦之星&#xff0c;考虑直接 <script&…

Vuex 模块的详解

Vuex 模块是将 store 分割成多个模块的一种方式&#xff0c;每个模块都有自己的状态、mutations、actions 和 getters。这有助于更好地组织和管理应用程序的状态。 创建模块&#xff1a; 首先&#xff0c;需要创建一个模块。可以在 store 中定义一个新的模块对象&#xff0c…

在git bash中可以提交代码,但是在android studio中提交代码就会报错

出现这个错误 error: unable to read askpass response from ‘C:\Users…\AppData\Local\Google\AndroidStudio2021.2\tmp\intellij-git-askpass-local.sh’ bash: line 1: /dev/tty: No such device or address 勾选git的use credential helper选项再提交就行了

ITK 图像分割(一):阈值ThresholdImageFilter

效果&#xff1a; 1、itkThresholdImageFilter 该类的主要功能是通过设置低阈值、高阈值或介于高低阈值之间&#xff0c;则将图像值输出为用户指定的值。 如果图像值低于、高于或介于设置的阈值之间&#xff0c;该类就将图像值设置为用户指定的“外部”值&#xff08;默认情况…

【电路笔记】-并联电感

并联电感 文章目录 并联电感1、概述2、并联电感示例13、互耦并联电感器4、并联电感示例25、并联电感示例36、总结当电感器的两个端子分别连接到另一个或多个电感器的每个端子时,电感器被称为并联连接在一起。 1、概述 所有并联电感器上的压降将是相同的。 然后,并联的电感器…

如何写好一个简历

如何编写求职简历 论Java程序员求职中简历的重要性 好简历的作用 在求职过程中&#xff0c;一份好的简历是非常重要的&#xff0c;它甚至可以直接决定能否被面试官认可。一份出色或者说是成功的个人简历&#xff0c;最根本的作用是能让看这份简历的人产生一定要见你的强烈愿…

【lesson53】线程控制

文章目录 线程控制 线程控制 线程创建 代码&#xff1a; 运行代码&#xff1a; 强调一点&#xff0c;线程和进程不一样&#xff0c;进程有父进程的概念&#xff0c;但在线程组里面&#xff0c;所有的线程都是对等关系。 错误检查: 传统的一些函数是&#xff0c;成功返回0&…

Java基于 SpringBoot 的高校校园点餐系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

BTC破5W+QAQ

比特币突破5万美元 创2021年来最高 比特币在龙年伊始涨超6.8%。在大年初四&#xff08;2月13日&#xff09;一度最高涨至5万零383美元。 今年1月&#xff0c;当市场期待已久的现货比特币交易所挂牌基金&#xff08;ETF&#xff09;推出后&#xff0c;比特币遭抛售&#xff0c…