【C语言】(3)字符

字符串

1. 字符串简介

在C语言中,字符串是由字符数组构成的序列,以空字符('\0')结尾。这个空字符不可见,用于标记字符串的结束。C语言中没有专门的字符串类型,通常使用字符数组表示字符串。

2. 声明和初始化字符串

字符串可以通过几种方式在C语言中声明和初始化。

字符数组初始化

char str1[] = "Hello"; // 自动添加'\0'
char str2[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 显式添加'\0'

使用指针

const char* str3 = "Hello"; // 指向字符串字面值

注意:使用指针指向字符串时,该字符串通常存储在程序的只读数据段中,不应被修改。

3. 字符串操作

C语言标准库 <string.h> 提供了多种操作字符串的函数。

字符串长度 - strlen()

#include <string.h>
size_t len = strlen(str1); // 计算字符串长度,不包含'\0'

字符串复制 - strcpy()strncpy()

char str4[10];
strcpy(str4, str1); // 复制字符串
strncpy(str4, str1, sizeof(str4)); // 复制指定长度的字符串

字符串连接 - strcat()strncat()

char str5[20] = "Hello, ";
strcat(str5, "World!"); // 在str5的末尾追加另一个字符串
strncat(str5, "Welcome!", 3); // 连接部分字符串

字符串比较 - strcmp()strncmp()

int cmp = strcmp(str1, "Hello"); // 比较两个字符串
int ncmp = strncmp(str1, "Hel", 3); // 比较两个字符串的前n个字符

字符串搜索 - strchr()strstr()

char* pch = strchr(str1, 'e'); // 查找字符在字符串中的首次出现
char* pstr = strstr(str1, "lo"); // 查找子字符串在字符串中的首次出现

4. 字符串的安全性

  • 在使用 strcpystrcat 等函数时,要确保目标数组足够大,以避免溢出。
  • 可使用 strncpystrncat 作为更安全的替代。
  • 永远不要尝试修改字符串字面值,这可能导致未定义行为。

5. 示例程序

#include <stdio.h>
#include <string.h>int main() {char greeting[20] = "Hello, ";const char* name = "C Programmer";strcat(greeting, name); // 连接字符串printf("Greeting: %s\n", greeting); // 输出结果printf("Length: %lu\n", strlen(greeting)); // 输出字符串长度return 0;
}

ASCII码

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是最基本的字符编码标准,用于文字和控制字符的编码。它最初是基于英语字母的编码标准,但后来逐渐成为国际标准。
在这里插入图片描述

ASCII码的组成

ASCII字符集包括以下几个部分:

  1. 控制字符:这些字符没有对应的可打印字符,用于控制像打印机等设备的行为。例如,换行(\n)、回车(\r)、制表符(\t)等。

  2. 可打印字符:包括英文字母(大写和小写)、数字(0-9)、标点符号以及其他一些特殊符号。

ASCII码的范围

ASCII定义了128个字符的编码,从0到127。每个字符占用一个字节(但实际上只使用了字节的低7位)。它可以分为以下两个主要部分:

  1. 标准ASCII码:0到127。包括常用的英文字母、数字、标点符号和一些控制字符。
  2. 扩展ASCII码:128到255。这部分不是标准ASCII的一部分,不同的系统和程序可能会有不同的实现。

ASCII码的应用

ASCII编码广泛应用于计算机和通信设备中。例如,键盘上每个按键的敲击都对应一个ASCII码。计算机内部,文本文件通常都是以ASCII码的形式存储字符。

示例

下面是一些常见ASCII字符及其对应的十进制、十六进制和二进制编码:

字符十进制十六进制二进制
A65410100 0001
B66420100 0010
a97610110 0001
048300011 0000
$36240010 0100
\n100A0000 1010

ASCII码和编程

在C语言和其他许多编程语言中,字符常量实际上是它们对应的ASCII码。例如,'A'实际上是整数65。

注意

  • ASCII码是字符编码的基础,对理解和使用计算机中的文本数据非常重要。
  • 许多现代编码系统(如UTF-8)都是以ASCII为基础扩展而来的。

转义字符

转义字符就是基于ASCII码设计出来的,用于表示无法直接显示的字符或具有特殊含义的字符。它们以反斜杠\开头,后跟一个或多个字符,组合起来表示一个特定的字符。

常见转义字符及其用途

以下是C语言中常用的转义字符及其意义:

转义字符含义
\n换行符
\t水平制表符
\b退格符
\r回车符
\'单引号
\"双引号
\\反斜杠
\a警告(响铃)
\f换页符
\v垂直制表符
\0空字符(NULL)
\ddd八进制表示的字符
\xhh十六进制表示的字符

使用示例

  1. 换行 (\n) 和 制表 (\t):
printf("Hello,\nWorld!\t2021\n");

输出:

Hello, 
World!  2021
  1. 单引号 (\') 和 双引号 (\"):
printf("It\'s a \"wonderful\" day.\n");

输出:

It's a "wonderful" day.
  1. 反斜杠 (\\):
printf("C:\\Program Files\\MyApp\n");

输出:

C:\Program Files\MyApp

特殊转义字符的应用

  1. 八进制和十六进制字符:

    • \ddd 表示一个八进制值对应的字符,ddd 是一到三个数字(0-7)。
    • \xhh 表示一个十六进制值对应的字符,hh 是一个或两个十六进制数字(0-9, A-F)。

示例:

printf("%c\n", '\101'); // 八进制表示的 'A'
printf("%c\n", '\x42'); // 十六进制表示的 'B'

输出:

A
B
  1. 响铃字符 (\a): 当打印此字符时,系统可能会发出响铃声(取决于系统配置)。
printf("\a");

注意事项

  • 在字符串和字符常量中使用转义字符。
  • \0(空字符)用于表示C字符串的结束。
  • 转义字符可以用于格式化输出,如换行、制表等。
  • 在处理文件路径或需要在字符串中包含引号时,转义字符非常有用。

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

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

相关文章

Facebook 广告帐户:多账号运营如何防止封号?

Facebook目前是全球最受欢迎的社交媒体平台之一&#xff0c;拥有超过27亿活跃用户。因此&#xff0c;它已成为个人和企业向全球受众宣传其产品和服务的重要平台。 然而&#xff0c;Facebook 制定了广告商必须遵守的严格政策和准则&#xff0c;以确保其广告的质量和相关性&…

一文搞懂Jenkins持续集成解决的是什么问题

1、持续集成的定义 大师 Martin Fowler 是这样定义持续集成的: 持续集成是一种软件开发实战, 即团队开发成员经常集成他们的工作. 通常, 每个成员每天至少集成一次, 也就意味着每天可能发生多次集成. 持续集成并不能消除Bug, 而是让它们非常容易发现和改正. 根据对项目实战的…

【C++11并发】mutex 笔记

简介 在多线程中往往需要访问临界资源&#xff0c;C11为我们提供了mutex等相关类来保护临界资源&#xff0c;保证某一时刻只有一个线程可以访问临界资源。主要包括各种mutex&#xff0c;他们的命名大都是xx_mutex。以及RAII风格的wrapper类&#xff0c;RAII就是一般在构造的时…

docker 修改默认存储位置

✨✨✨✨✨✨✨ &#x1f380;前言&#x1f381;查看前面docker储存位置&#x1f381;移动文件位置&#x1f381;修改配置文件docker.service&#x1f381;修改daemon.json&#x1f381;加载配置并重启 &#x1f380;前言 最近服务出现系统盘满了,发现其中docker存储占用很大一…

Keycloak - docker 运行 前端集成

Keycloak - docker 运行 & 前端集成 这里的记录主要是跟我们的项目相关的一些本地运行/测试&#xff0c;云端用的 keycloak 版本不一样&#xff0c;不过本地我能找到的最简单的配置是这样的 docker 配置 & 运行 keycloak keycloak 有官方(Red Hat Inc.)的镜像&#…

基于固件库的RT-THREAD移植

为什么要使用操作系统 当我们进入嵌入式这个领域的时候&#xff0c; 往往首先接触的都是单片机编程&#xff0c; 单片机编程又首选 51 单片机来入门。 这里面说的单片机编程通常都是指裸机编程&#xff0c;即不加入任何 RTOS&#xff08;Real Time Operation System 实时操作系…

药物使用不当可能会导致耳聋,尤其是这6类,需警惕

耳聋的原因有很多&#xff0c;其中之一就是药物使用不当。有些药物具有耳毒性&#xff0c;也就是说&#xff0c;它们会损害内耳的结构和功能&#xff0c;导致听力下降或丧失。这种药物性耳聋有时是可逆的&#xff0c;有时则是永久的。那么&#xff0c;到底哪些药物会导致耳聋和…

ctf-idea调试jar包

0.拿到jar包并解压 进入解压出来的目录,然后以该目录打开项目 1.设置maven 设不设置都行 2.添加依赖 添加两个依赖, boot-inf下的 classes和lib 3.配置调试器 添加 remote jvm debug 1.根据jdk版本选择调试参数 2.选择module classpath为解压后的文件夹名 如图,运行jar包的…

CDR绘图软件|安装教程来了(小白福利:有红包封面领取哦!)

前言 今天给小伙伴们讲讲&#xff1a;如何安装CDR软件。 如果未来的你想从事平面设计/广告行业&#xff0c;那应该就会接触到CDR这款软件。 CorelDRAW Graphics Suite是加拿大Corel公司的平面设计软件&#xff1b;该软件是Corel公司出品的矢量图形制作工具软件&#xff0c;这…

Confluence 的文章导入到 YouTrack KB 中

YouTrack 是有一个 KB 的&#xff0c;我们可以吧 Confluence 的文章全部导入到 YouTrack 的 KB 中。 首先&#xff0c;你需要具有管理员权限&#xff0c;然后选择导入。 然后可以在打开的界面中新增一个导入。 在新增导入中输入 Confluence 在随后的界面中输入你 Confluence …

【Hexo博客|Fluid主题】实现链接卡片效果

文章目录 前言一、CardLink库二、配置步骤1. 添加静态js文件2. 使库文件生效3. 编写启用CardLink4. 查看效果效果与前面一致。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/06e0630f994d4d67a90e18e291c3fdc5.png#pic_center) 总结 前言 今天在阅读Github…

格子表单GRID-FORM | 嵌套子表单与自定义脚本交互

格子表单/GRID-FORM已在Github 开源&#xff0c;如能帮到您麻烦给个星&#x1f91d; GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互 新版本功能 &#x1f389; 不觉间&#xff0c;GRID-FORM 已经开源一年&#xff08;2023年1月29日首次提交…

通过FileZilla配置FTP

FileZilla服务端的安装 在虚拟机里安装FileZilla服务器 FileZilla的官网 下载一个客户端和一个服务端的FileZilla 如果已经有了一个客户端&#xff0c;可以不下用载。 FileZilla的配置 说明一下&#xff1a;通过FileZilla配置FTP有两种模式&#xff0c;我们先用被动模式 下载…

GoZero微服务个人探究之路(九)api文件编写总结

参考来源go-zero官方文档https://go-zero.dev/docs/tutorials 前言 go-zero是目前star最多的go语言微服务框架&#xff0c;api 是 go-zero特殊的语言&#xff0c;类型文件&#xff0c;go-zero自带的goctl可以通过.api文件生成http服务代码 api文件内容编写 不可使用关键字 …

Datawhale 组队学习之大模型理论基础 Task7 分布式训练

第8章 分布式训练 8.1 为什么分布式训练越来越流行 近年来&#xff0c;模型规模越来越大&#xff0c;对硬件&#xff08;算力、内存&#xff09;的发展提出要求。因为内存墙的存在&#xff0c;单一设持续提高芯片的集成越来越困难&#xff0c;难以跟上模型扩大的需求。 为了…

MATLAB|融合需求侧虚拟储能系统的楼宇微网优化调度¥29

目录 主要内容 模型研究 一、虚拟储能特征 二、楼宇微网虚拟储能 结果一览 下载链接 主要内容 该模型以楼宇为研究对象&#xff0c;围绕夏季制冷负荷&#xff0c;利用楼宇的蓄热特性&#xff0c;实现融合需求侧虚拟储能系统的楼宇微网优化调度模型&#xff0c;…

带【科技感】的Echarts 图表

Echarts脚本在线地址 https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js 引入Echarts 脚本后粘贴代码 vue2 代码&#xff1a; <template><div><div ref"col-2-row-2" class"col-2-row-2"></div></div> <…

力扣题目训练(1)

2024年1月25日力扣题目训练 2024年1月25日力扣题目训练225. 用队列实现栈257. 二叉树的所有路径258. 各位相加81. 搜索旋转排序数组 II82. 删除排序链表中的重复元素 II30. 串联所有单词的子串 2024年1月25日力扣题目训练 2024年1月25日开始进行编程训练&#xff0c;今天主要是…

网安渗透攻击作业(1)

实现负载均衡 第一步&#xff1a;安装依赖 sudo apt insta11 libgd-dev 第二步&#xff1a;下载nginx wget http://nginx.org/download/nginx-1.22.1.tar.gz 第三步&#xff1a;对nginx进行解压 tar -zvxf nginx-1.22.1.tar.g2 第四步&#xff1a;编译安装nginx cd ngi…

通达信动量振荡指标公式(AO),反映市场驱动力的变化

动量振荡指标AO(Awesome Oscillator)衡量的是最近5根K线的动量与过去34根K线的动量对比&#xff0c;反映市场驱动力的变化。 一、动量振荡指标公式&#xff08;副图&#xff09; 动量振荡指标AO计算公式&#xff1a; 1、计算中间价&#xff0c;将最高价和最低价的和除以2&…