C 编程中使用字符串
理解字符串:
C 中的字符串是使用字符数组来操作的。数组中的每个字符对应字符串的一个元素,字符串的结尾由空字符('\0')标记。这个空字符至关重要,因为它表示字符串的结尾,并允许函数确定字符串在内存中的结尾位置。
例如,字符串“hello”表示为:
char str[] = {'h', 'e', 'l', 'l', 'o', '\0'};
该数组 str 保存字符串“hello”的字符,并以空字符“\0”结尾,指示字符串的终止。
另一种常见的表示形式是使用字符串文字:
char str[] = "hello";
在这种情况下,编译器会自动在字符串末尾附加空字符“\0”。
字符数组与字符串文字:
字符数组:
您可以通过定义数组的大小并初始化各个字符来创建它们。
例如:
char name[5] = {'J', 'o', 'h', 'n', '\0'};
这将创建一个名为 的字符数组name
,最多可容纳 6 个字符(包括空终止符“\0”)并显式分配每个字符。
字符串文字:
通过将字符括在双引号内来表示:这是一种更短且更方便的表示字符串的方式。
编译器自动附加空字符('\0'):例如:
char greeting[] = "Hello";
在这里,编译器根据字符串文字“Hello”的长度确定数组的大小,并自动添加 null 终止符'\0'
。
空终止符“\0”:
空字符('\0')是 C 中的特殊字符,用于标记字符串的结尾。它的 ASCII 值为 0。
在 C 中,字符串以此空字符终止,以指示字符串内容的结尾。对于处理字符串的函数来说,了解字符串的结束位置至关重要。例如,当您使用诸如strlen()
确定字符串长度之类的函数时,它会通过计算字符数直到遇到空字符来计算长度。
例如:
char message[] = "Hello";
该字符串“Hello”存储为'H', 'e', 'l', 'l', 'o', '\0'
.
如果没有空字符,对字符串进行操作的 C 函数将不知道字符串在哪里结束,从而导致未定义的行为或意外结果。
字符串输入和输出函数:
使用 printf() 进行输出:
printf() 函数用于将字符串打印到标准输出(通常是控制台)。
例子:
#include <stdio.h>int main() {char str[] = "Hello";printf("The string is: %s\n", str);return 0;
}
输出:
The string is: Hello
使用 scanf() 作为输入:
scanf() 函数用于从标准输入(键盘)读取字符串。
例子:
#include <stdio.h>int main() {char name[20];printf("Enter your name: ");scanf("%s", name);printf("Hello, %s!\n", name);return 0;
}
输入:
Enter your name: Kareem
输出:
Hello, Kareem!
注意:scanf("%s", name)
从用户输入中读取字符串,但会在第一个空白字符(空格、制表符、换行符)处停止。
使用 fgets() 作为输入:
该fgets()
函数从标准输入读取一行文本,并在输入中允许空格。
例子:
#include <stdio.h>int main() {char sentence[50];printf("Enter a sentence: ");fgets(sentence, sizeof(sentence), stdin);printf("You entered: %s", sentence);return 0;
}
输入:
Enter a sentence: This is a sentence with spaces.
输出:
You entered: This is a sentence with spaces.
这些示例演示了如何在 C 语言中使用printf()
、scanf()
和fgets()
函数进行字符串输入和输出,从而允许在程序执行期间与字符串进行交互。
字符串操作函数:
在 C 中,标头提供了一组允许操作字符串的函数。一些常用的函数包括:
strcpy()
:该函数将源字符串中的字符复制到目标字符串,直到遇到源字符串中的空字符('\0')。例子:
#include <stdio.h>
#include <string.h>int main() {char source[] = "Hello";char destination[20];strcpy(destination, source);printf("Destination string after copying: %s\n", destination);return 0;
}
输出:
Destination string after copying: Hello
strcat()
:此函数将源字符串的内容连接(附加)到目标字符串的末尾。它从目标字符串的空字符 ('\0') 开始,并从源字符串复制字符,直到遇到其空字符。
例子:
#include <stdio.h>
#include <string.h>int main() {char str1[20] = "Hello";char str2[] = " World";strcat(str1, str2);printf("Concatenated string: %s\n", str1);return 0;
}
输出:
Concatenated string: Hello World
strlen()
:该函数返回字符串str中的字符数,不包括空字符('\0')。例子:
#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello";int length = strlen(str);printf("Length of the string: %d\n", length);return 0;
}
输出:
Length of the string: 5
以下是 C 语言中一些额外的常见字符串操作:
strcmp()
:该函数比较str1和str2的内容并返回:
- 如果两个字符串相等则为 0。
- 如果 str1 小于 str2,则该值小于 0。
- 如果 str1 大于 str2,则为大于 0 的值。例子:
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);
strncpy()
:此函数将特定数量的字符从一个字符串复制到另一个字符串。下面的示例将最多 num 个字符从源复制到目标:
char source[] = "Hello";
char destination[10];
strncpy(destination, source, 3); // Copies only 3 characters
相关文章:
C 编程中使用字符串
理解字符串: C 中的字符串是使用字符数组来操作的。数组中的每个字符对应字符串的一个元素,字符串的结尾由空字符(\0)标记。这个空字符至关重要,因为它表示字符串的结尾,并允许函数确定字符串在内存中的结…...

【GD32307E-START】04 使用TinyMaix进行手写数字识别
【GD32307E-START】04 使用TinyMaix进行手写数字识别 参考博客 【GD32F427开发板试用】使用TinyMaix进行手写数字识别 https://blog.csdn.net/weixin_47569031/article/details/129009839 软硬件平台 GD32F307E-START Board开发板GCC Makefile TinyMaix简介 TinyMaix是国…...

qt-C++笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解
qt-C笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解 code review! 文章目录 qt-C笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解1.示例运行2.event->pos();详解3.event->pos()的坐标系原点4.Qt中的坐标系详解5.QMainWindow::mousePressEvent(event);详解 1.示例…...

小程序开发平台源码系统:搭建新的商业体系 附带完整的搭建教程
小程序开发平台源码系统是在移动互联网快速发展的背景下诞生的。随着微信小程序的普及,越来越多的人开始关注小程序的开发与运营。然而,对于很多初学者和小型企业来说,开发一个小程序需要专业的技术知识和大量的时间投入,这无疑是…...
css3新增的伪类有哪些?
CSS3新增的伪类有: :first-of-type,选择属于其父元素的特定类型的第一个子元素。:last-of-type,选择属于其父元素的特定类型的最后一个子元素。:only-of-type,选择属于其父元素的特定类型的唯一子元素。:only-child,选…...

开源软件license介绍与检测
开源License介绍 通俗来讲,开源许可证就是一种允许软件使用者在一定条件内按照需要自由使用和修改软件及其源代码的的法律条款。借此条款,软件作者可以将这些权利许可给使用者,并告知使用限制。这些许可条款可以由个人、商业公司或非赢利组织…...
【LeeCode】142.环形链表II
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数…...

nodejs微信小程序+python+PHP健身房信息管理系统的设计与实现-计算机毕业设计推荐
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...

springboot集成springsecurity
转载自:www.javaman.cn 1、整合springsecurity 添加pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>2、springsecurity认证授权流程…...
脏读、不可重复读、幻读
一、脏读 A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。就好像原本的数据比较干净、纯粹,此时由于B事务更改了它,这个数据变得不再纯粹。这个时候A事务立即读取了这个脏…...

思维模型 反馈效应
本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。反馈促进改进。 1 反馈效应的应用 1.1 反馈效应在营销中的应用 1 “可口可乐与百事可乐之战” 在 20 世纪 80 年代,可口可乐公司是全球最大的饮料公司之一,其市场…...
【PyTorch】线性回归
文章目录 1. 模型与代码实现2. Q&A 1. 模型与代码实现 模型 y ^ w 1 x 1 . . . w d x d b w ⊤ x b . \hat{y} w_1 x_1 ... w_d x_d b \mathbf{w}^\top \mathbf{x} b. y^w1x1...wdxdbw⊤xb. 代码实现 import torch from torch import nn from to…...
硝烟弥漫的科技战场——GPT之战
没想到2023年的双11之后,还能看到如此多的科技圈大佬针对GPT提出火药味十足的讨论和极具戏剧性的表演。 历史回顾: 11月6日,OpenAI发布会:GPT-4 Turbo模型、GPT应用商店、开源Whisper-large-v3等;11月17日࿰…...

re:Invent 构建未来:云计算生成式 AI 诞生科技新局面
文章目录 前言什么是云计算云计算类型亚马逊云科技云计算最多的功能最大的客户和合作伙伴社区最安全最快的创新速度最成熟的运营专业能力 什么是生成式 AI如何使用生成式 AI后记 前言 在科技发展的滚滚浪潮中,我们见证了云计算的崛起和生成式 AI 的突破,…...
oneApi实现并⾏排序算法
零、OneApi简介 oneAPI是由英特尔推出的一个开放、统一的编程模型和工具集合,旨在简化跨不同硬件架构的并行计算。oneAPI的目标是提供一个统一的编程模型,使开发人员能够使用相同的代码在不同类型的硬件上进行并行计算,包括CPU、GPU、FPGA和…...
语音芯片的BUSY状态指示功能特征:提升用户体验与系统稳定性的关键
在电子产品的音频系统中,语音芯片扮演着至关重要的角色。为了保证音频的流畅播放和功能的正常运行,语音芯片的各种状态指示功能变得尤为重要。其中,BUSY状态指示功能是语音芯片中的一项关键特征,它对于提升用户体验和系统稳定性具…...

Leetcode2661. 找出叠涂元素
Every day a Leetcode 题目来源:2661. 找出叠涂元素 解法1:哈希 题目很绕,理解题意后就很简单。 由于矩阵 mat 中每一个元素都不同,并且都在数组 arr 中,所以首先我们用一个哈希表 hash 来存储 mat 中每一个元素的…...

免费最新6款热门SEO优化排名工具
网站的存在感对于业务和品牌的成功至关重要。在众多网站推广方法中,搜索引擎优化(SEO)是提高网站可见性的关键。而SEO的核心之一就是关键词排名。为了更好地帮助您优化网站。 SEO关键词排名工具 在如今信息过载的互联网时代,用户…...

绝地求生在steam叫什么?
绝地求生在Steam的全名是《PlayerUnknowns Battlegrounds》,简称为PUBG。作为一款风靡全球的多人在线游戏,PUBG于2017年3月23日正式上线Steam平台,并迅速成为一部热门游戏。 PUBG以生存竞技为核心玩法,玩家将被投放到一个辽阔的荒…...

Elasticsearch:什么是大语言模型(LLM)?
大语言模型定义 大语言模型 (LLM) 是一种深度学习算法,可以执行各种自然语言处理 (natural language processing - NLP) 任务。 大型语言模型使用 Transformer 模型,并使用大量数据集进行训练 —— 因此规模很大。 这使他们能够识别、翻译、预测或生成文…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...