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

从零开始,探索C语言中的字符串

字符串

    • 1. 前言
    • 2. 预备知识
      • 2.1 字符
      • 2.2 字符数组
    • 3. 什么是字符串
    • 4. '\0'
      • 4.1 '\0'是什么
      • 4.2 '\0'的作用
        • 4.2.1 打印字符串
        • 4.2.2 求字符串长度

在这里插入图片描述

1. 前言

大家好,我是努力学习游泳的鱼。你已经学会了如何使用变量和常量,也知道了字符的概念。但是你可能还不了解由字符构成的字符串,这篇文章将带你一探究竟。

2. 预备知识

2.1 字符

单引号引起来的一个字符,用来初始化char类型的变量。

'a'; // 这是一个字符
char ch = 'w'; // 用来初始化char类型的变量

2.2 字符数组

字符数组可以存储很多字符,格式是char+空格+数组名+左方括号(+数组最多存储的字符个数,如果省略就默认取初始化的字符个数)+右方括号+初始化(大括号引起来几个字符,中间用逗号隔开)

char ch[3] = { 'a', 'b', 'c' }; // 最多存3个字符,即a,b,c
char ch[] = { 'd', 'e', 'f', 'g' }; // 方括号内省略字符个数,默认为4,因为初始化了4个字符

3. 什么是字符串

用双引号引起来的一串字符叫做字符串。

"abcdefg"; // 这就是一个字符串

4. ‘\0’

4.1 '\0’是什么

字符串可以用来初始化字符数组。

char arr1[] = "abc";
char arr2[] = { 'a', 'b', 'c' };

arr1arr2有什么区别呢?
在这里插入图片描述
我们发现,arr2就是很正常的存储了a,b,c这3个字符,但是arr1在后面还跟了个'\0'
这个'\0'究竟是何方神圣?

字符串的结尾都隐藏了一个叫做'\0'的转义字符。

"abc"这个字符串其实是4个字符:'a','b','c','\0',所以说,

字符串的结束标志是'\0'

4.2 '\0’的作用

4.2.1 打印字符串

我们可以用printf配合%s打印字符串。

#include <stdio.h>int main()
{printf("%s\n", "abcdef");return 0;
}

把上面的arr1arr2打印出来会是怎样的呢?

#include <stdio.h>int main()
{char arr1[] = "abc";char arr2[] = { 'a', 'b', 'c' };printf("%s\n", arr1);printf("%s\n", arr2);return 0;
}

输出:
abc
abc烫烫烫烫烫烫烫烫烫烫bc

我们发现,字符串arr1正常打印,但是字符数组arr2打印出来的是个啥玩意呀?
要搞清楚这一点,就要明白arr1arr2的内存布局,以及'\0'的作用。
arr1是用字符串"abc"初始化的,根据前面说的,字符串的结束标志是\0,字符串的结尾都隐藏了一个\0,arr1数组里相当于存储了'a','b','c','\0'四个字符。
arr2就不一样了,它只是单纯的用三个字符'a','b','c'来初始化的,里面也只存放着这三个字符,后面没有'\0',内存中后面放了什么,我们无从知晓。
%s是用来打印字符串的,还是那句话,字符串的结束标志是'\0'
在打印arr1时,打印了'a','b','c',就遇到了'\0'这个结束标志,停止打印。
反观arr2,打印完'a','b','c',没有遇到'\0',就继续把内存中后面的值打印出来,直到遇到'\0'才停止。可是,我们不知道内存中后面放了啥,换句话说,内存中后面放的都是些随机值,那打印出来的也是随机值,具体表现出来就是abc后面的烫烫烫。
如果我们手动放一个'\0',两个字符数组的内存布局就一样了。

#include <stdio.h>int main()
{char arr1[] = "abc";char arr2[] = { 'a', 'b', 'c', '\0' };printf("%s\n", arr1);printf("%s\n", arr2);return 0;
}

输出:
abc
abc

4.2.2 求字符串长度

我们可以用strlen函数求字符串长度。

strlen是C语言提供的库函数,对应的头文件是string.h,使用时只需要把字符串传进去就可以了。

#include <stdio.h>
#include <string.h>int main()
{char arr1[] = "abc";char arr2[] = { 'a', 'b', 'c' };printf("%d\n", strlen(arr1));printf("%d\n", strlen(arr2));return 0;
}

输出:
3
42

有了前面的知识,就很容易理解这个结果了。
arr1里面存的是'a','b','c','\0',由于有'\0'的存在,可以很清楚的求出字符串的长度是3,也就是'\0'前面的字符的个数。
反观arr2,因为'a','b','c'后面没有'\0',所以无法求出其长度。就这次的运行结果而言,程序在内存中一直往后找呀找呀,从'a'开始一直找了42个字符才在内存中遇到了'\0',于是算出来的结果是42。这个结果是不可预料的,它是个随机值。
如果手动放一个'\0',就能够准确地求出它的长度了。

#include <stdio.h>
#include <string.h>int main()
{char arr1[] = "abc";char arr2[] = { 'a', 'b', 'c', '\0' };printf("%d\n", strlen(arr1));printf("%d\n", strlen(arr2));return 0;
}

输出:
3
3

总结:strlen求的是'\0'前面字符的个数!

相关文章:

从零开始,探索C语言中的字符串

字符串 1. 前言2. 预备知识2.1 字符2.2 字符数组 3. 什么是字符串4. \04.1 \0是什么4.2 \0的作用4.2.1 打印字符串4.2.2 求字符串长度 1. 前言 大家好&#xff0c;我是努力学习游泳的鱼。你已经学会了如何使用变量和常量&#xff0c;也知道了字符的概念。但是你可能还不了解由…...

Ubuntu学习---跟着绍发学linux课程记录(第二部分)

文章目录 7 文件权限7.1 文件的权限7.2 修改文件权限7.3 修改文件的属主 8、可执行脚本8.2Shell脚本8.3python脚本的创建 9Shell9.1Shell中的变量9.2 环境变量9.3用户环境变量 学习链接: Ubuntu 21.04乌班图 Linux使用教程_60集Linux课程 所有资料在 http://afanihao.cn/java …...

React18 新特性

React18 新特性 自动批量更新State 定义 import { useState } from reactconst [x, setX] useState(0)渲染赋值 setX(5)并发CM模式 同步不可中断更新机制 -> 异步可中断并行 状态更新 机制 React18 默认开启并发模式 详见代码 ReactDOM 的引入 import ReactDOM fr…...

HarmonyOS Codelab 优秀样例——购物应用,体验一次开发多端部署魅力

一. 样例介绍 本篇Codelab基于自适应布局和响应式布局&#xff0c;实现购物应用在手机、折叠屏、平板不同屏幕尺寸设备上按不同设计显示。通过三层工程结构组织代码&#xff0c;实现一次开发&#xff0c;多端部署 。 手机运行效果如图所示&#xff1a; 折叠屏运行效果图&#x…...

音频基本知识

声音传播方式: 1)声音的传播需要介质,在真空中不能传播; 2)声波属于纵波,即如下图传播方向与振动方向一致; 声音速度: 1)常温常压下,一般空气速度为340m/s; 2)温度越高,声速越大; 3)液体、固体的传播速度比空气快; 人耳可接收到的频域范围: 1)通常范围…...

小程序中如何给会员卡设置到期时间

通过设置会员卡到期时间&#xff0c;可以有效地管理会员卡的使用周期&#xff0c;提供更好的会员服务体验。下面将介绍一种常见的给会员卡设置到期时间的方法。 1. 找到指定的会员卡。在管理员后台->会员管理处&#xff0c;找到需要设置到期时间的会员卡。也支持对会员卡按…...

Cookie与Session的区别及如何选择

目录 Cookie Session 如何选择 在网站开发中&#xff0c;Cookie与Session是两种常见的数据管理方式&#xff0c;它们在不同情况下有各自的优势和劣势。在这篇文章中&#xff0c;我们将深入了解Cookie与Session之间的区别&#xff0c;并提供了一些建议&#xff0c;帮助您在实…...

【快手小玩法-弹幕游戏】开发者功能测试报告提交模板

背景 快手有明确的要求&#xff0c;准入和准出更加严格&#xff0c;要求有明确的测试报告。格式如下&#xff1a; *本文参考字节wiki&#xff1a;CP侧测试报告模板(复制填写轻雀文档) 其他文章推荐&#xff1a;【抖音小玩法-弹幕游戏】开发者功能测试报告提交模板 一、前言…...

微信小程序在线阅读系统微信小程序设计与实现

摘 要&#xff1a;信息技术永远是改变生活的第一种创新方式&#xff0c;各种行业的发展更是脱离不了科技化的支持。原本传统的行业正在被科技行业的切入悄悄的发生变化。就拿我们生活当中常见的事情举例而言&#xff0c;在外卖行业还没有发展的快速的时候&#xff0c;方便面等速…...

【OpenCV入门】第七部分——图像的几何变换

文章结构 缩放dsize参数实现缩放fx参数和fy参数实现缩放 翻转仿射变换平移旋转倾斜 透视cmath模块 缩放 通过resize()方法可以随意更改图像的大小比例&#xff1a; dst cv2.resize(src, dsize, fx, fy, interpolation)src&#xff1a; 原始图像dsize&#xff1a; 输出图像的…...

淘宝app商品详情原数据接口API(支持高并发请求/免费测试)

item_get_app-获得淘宝app商品详情原数据 一、引言 随着移动互联网的迅速发展&#xff0c;移动电商应用的需求也在不断增长。淘宝作为中国最大的电商平台之一&#xff0c;每天需要处理大量的商品数据和用户访问请求。为了提供更加优质的用户体验&#xff0c;淘宝开放了商品详…...

JS中的new操作符

文章目录 JS中的new操作符一、什么是new&#xff1f;二、new经历了什么过程&#xff1f;三、new的过程分析四、总结 JS中的new操作符 参考&#xff1a;https://www.cnblogs.com/buildnewhomeland/p/12797537.html 一、什么是new&#xff1f; 在JS中&#xff0c;new的作用是通过…...

文件编辑器、用户管理,嘎嘎学

打开文件 vim # 首先你先得下载这个插件 yum install -y vim vim 文件名 进入编辑模式 i #在光标所在处进入编辑模式 a #在当前光标后面进入编辑模式 o #在光标的下一行进入编辑模式 I #在光标所在处行首进入编辑模式 A #在光标所在处行尾进入编辑模式 O #在光标的上一…...

Java获取当前类名的两种方法

适用于非静态方法&#xff1a;this.getClass().getName() 适用于静态方法&#xff1a;Thread.currentThread().getStackTrace()[1].getClassName() 获取类名&#xff1a; 1、在类的实例中可使用this.getClass().getName();但在static method中不能使用该方法&#xff1b; 2、在…...

windows系统开机自启打开指定网页

windows系统开机自启打开指定网页 1、在电脑桌面右击新建快捷方式&#xff0c;输入想要开机打开的网址 2、点击下一步输入自己想要命名的名字 3、使用快捷键winR运行&#xff0c;输入shell:startup&#xff0c;点击确定 4、把在桌面创建快捷方式拉到启动文件夹里面 5、这样就完…...

Java-HashMap中put()方法是如何实现的,内含详细流程图

文章目录 Java中的HashMap什么是HashMap&#xff1f;对比其他Map中put()方法HashMap中put()方法使用示例 HashMap中put()源码解析手绘流程图实现原理源码探究&#xff08;JDK 1.8&#xff09; 设计put()的意义总结 Java中的HashMap 什么是HashMap&#xff1f; HashMap是Java中…...

kaggle赛后总结

1. 宽表 2.缺失值的处理方法 最简单粗暴的就是删除&#xff0c;这种情况是凡是有缺失值行数很少。均值替代。缺失值的行数比较多一点儿的时候&#xff0c;直接删除会影响样本数量&#xff0c;那就均值替代&#xff0c;或者中位数替代等方法。还有复杂的方法&#xff0c;把有缺…...

基于Vue前端框架构建BI应用程序

一、什么是Vue&#xff1f; Vue&#xff08;Vue.js&#xff09;是一个轻量级、高性能、可组件化的MVVM库。简而言之&#xff0c;是一个构建数据驱动的web界面的渐进式框架。它采用MVVM思想&#xff0c;通过数据双向绑定实现数据的动态渲染&#xff0c;同时也支持组件化的开发方…...

【文心一言】学习笔记

学习资料 《听说文心一言App霸榜了&#xff0c;那必须来一波全方位实测了》 情感陪伴&#xff1a;文心一言 App 可以充当用户的情感树洞&#xff0c;提供知心姐姐、【暖男】等角色扮演&#xff0c;为用户提供情绪疏导、情感分析、约会建议等服务。 1. 模型属性 【提示词工具…...

Xilinx UltraScale架构之可配置逻辑块CLB

目录 一、概览 二、UltraScale架构 2.1 UltraScale/UltraScale特点 2.2 与7系列CLB差异 三、 CLB结构 3.1 LUT 3.2 FF 3.3 多路选择器Multiplexers 3.4 进位链Carry Chain 四、应用 4.1 分布式RAM 4.2 移位寄存器 4.3 进位链Carry Chain 五、参考资料 一、概览 二…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...