【C语言】(3)字符

news2024/10/5 16:29:49

字符串

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.coloradmin.cn/o/1406188.html

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

相关文章

Redis 高可用之主从复制

1、简介 在 Redis 中&#xff0c;主从复制就是多个节点进行数据同步&#xff0c;在这些节点中&#xff0c;有 Master 和 slave 两个角色&#xff0c;Master 以写为主&#xff0c;slave 以读为主&#xff0c;当 Master 数据变化的时候&#xff0c;会自动将新的数据同步到其他的 …

让代码在键盘上跳“华尔兹”的10大原则

大家好&#xff0c;我是小❤&#xff0c;一个漂泊江湖多年的 985 非科班程序员&#xff0c;曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。 引言 编程界都知道&#xff0c;代码是一种艺术 —— 它是对技术职责和美学眼光的完美融合。 正如一名工匠在雕琢他的作品&am…

白酒:制曲工艺的特点与核心技术

白酒&#xff0c;其制曲工艺是品质的关键所在。制曲是酿酒过程中重要的环节&#xff0c;对于酒的口感和品质有着至关重要的影响。在云仓酒庄豪迈白酒的制曲工艺中&#xff0c;有几个显著的特点和核心技术。 制曲原料丰富多样&#xff0c;除了常见的麦类&#xff0c;还可采用了…

菜鸟导入导出assetbundle

因为菜鸟不会用unity c#什么的&#xff0c;所以最后参考贴吧的方法用的是UABE(Unity Assets Bundle Extractor)和UABEA(Unity Assets Bundle Extractor Avalonia) 可以去github上下载 对于txt、xml什么的可以直接改&#xff0c;但是byte文件里还是会有一些类似乱码的东西&…

使用 Swift 代码优化项目编译速度

引言 软件的性能是评价一个软件质量的重要指标&#xff0c;尤其在今天这个时代&#xff0c;性能已成为大型项目不可或缺的考虑因素之一。对于用户量极大的软件&#xff0c;如网银系统、在线购物商城等&#xff0c;更是必须保证其高效稳定的性能。在这种背景下&#xff0c;优化…

AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(十)

又是认真学习的一天。 1.Git 初识 2.掌握 Git 仓库 3.Git 的三个区域 git ls-files 查看当前暂存区有哪些文件 4.Git 文件状态 5.Git 暂存区使用 使用git restore命令恢复修改过的index.css 使用git rm --catched命令从暂存区移除index.css文件 再用git add .放回9&#xff08;…

使用 SpringBoot 框架手撸一个本地缓存工具!

在实现本地缓存的时候&#xff0c;我们经常使用线程安全的ConcurrentHashMap来暂存数据&#xff0c;然后加上SpringBoot自带的Scheduled定时刷新缓存。虽然这样可以实现本地缓存&#xff0c;但既不优雅也不安全。 那看一下我的思路&#xff0c;首先看一张图! 1.每个处理器都有…

喷墨打印机市场分析:预计2029年将达到548亿美元

喷墨打印机是将彩色液体油墨经喷嘴变成细小微粒喷到印纸上,有的喷墨打印机有三个或四个打印喷头&#xff0c;以便打印黄、品红青黑四色;有的是共用一个喷头&#xff0c;分四色喷印。 喷墨打印机是在针式打印机之后发展起来的&#xff0c;采用非打击的工作方式。比较突出的优点有…

kubernetes Pod 异常排查步骤

kubernetes Pod 异常排查步骤 详细排查图查看容器状态查看容器列表容器未启动成功排查容器启动成功排查pod状态对应原因 详细排查图 查看容器状态 查看容器列表 查看容器列表,最好在后面跟上命名空间,不跟上查询出来是默认的 kubectl get pods -n kubesphere-system单独查看某…

eNSP学习——理解ARP及Proxy ARP

目录 名词解释 实验内容 实验目的 实验步骤 实验拓扑 配置过程 基础配置 配置静态ARP 名词解释 ARP (Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议。ARP表项可以分为动态和静态两种类型。   动态ARP是利用ARP广播报文&#xff0c;动态执行并自动进…

sprignboot电商书城源码

运行环境: jdk1.8,maven,mysql 项目技术: 后台主要是springbootmybatisshirojsp&#xff0c;前端界面主要使用bootstrap框架搭建&#xff0c;并使用了ueditor富文本编辑器、highcharts图表库。 有需要的可以联系我。 功能介绍&#xff1a; 该系统分为前台展示和后台管理两…

芯课堂 | 通过ISP升级芯片固件方法及框架

一、升级原理 芯片在应用前&#xff0c;是一颗裸片&#xff0c;内部没有任何驱动或应用程序。芯片在贴上PCB板子后&#xff0c;会实现各种功能&#xff0c;这是时候会开发对应的驱动或者应用程序&#xff0c;在芯片上面运行的程序&#xff0c;一般称之为固件&#xff08;Firmw…

低代码,让软件开发不再复杂

低代码一词&#xff0c;有人认为它是第四代编程语言&#xff0c;有人认为它是开发模式的颠覆&#xff0c;也有人认为它是企业管理模式的变革……有很多声音&#xff0c;社区讨论很热烈。 即使这样&#xff0c;至今也有不少人还不知道这项技术&#xff0c;今天笼统的介绍一下低代…

DataStream API(输出算子)

源算子 源算子 转换算子 转换算子 输出算子 1.连接到外部系统 连接外部系统是计算机科学和信息技术领域中常见的一个任务&#xff0c;通常涉及到与外部数据源或服务进行交互。具体的方法和工具会根据不同的应用场景和需求而有所不同。以下是一些常见的连接外部系统的方法&…

BioTech - 量子化学与分子力场

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135787607 量子化学是应用量子力学的规律和方法来研究化学问题的一门学科&#xff0c;主要关注分子的结构、性质和反应过程。 量子化学的理论方法…

Midjourney基础 | 使用流程 注册,基础文生图,图的放大微调,保存

文章目录 1 使用流程2 生成自己的第一张图3 图的放大&#xff0c;微调3.1 放大3.2 微调变化 4 图的保存 Midjourney是依托于Discord的&#xff0c;但我也是通过Midjourney才了解的Discord 维基百科说~~Discord是一款专为社群设计的免费网络实时通话&#xff0c;主要针对游戏玩家…

Dify学习笔记-手册(三)

1、应用构建及提示词 在 Dify 中&#xff0c;一个“应用”是指基于 GPT 等大型语言模型构建的实际场景应用。通过创建应用&#xff0c;您可以将智能 AI 技术应用于特定的需求。它既包含了开发 AI 应用的工程范式&#xff0c;也包含了具体的交付物。 简而言之&#xff0c;一个应…

【设计模式】美团三面:你连装饰器都举不出例子?

什么是装饰器模式&#xff1f; 装饰器模式&#xff0c;这个设计模式其实和它的名字一样&#xff0c;非常容易理解。 想象一下&#xff0c;每天出门的时候&#xff0c;我们都会思考今天穿什么。睡**衣、睡裤加拖鞋&#xff0c;还是西装、领带加皮鞋&#xff1f;又或者说是&…

获取b站目录

参考链接&#xff1a; JS获取B站视频选集目录 Week6 - 知乎 代码 var x document.getElementsByClassName("clickitem"); var i; for (i 0; i < x.length; i) {var page_num x[i].getElementsByClassName("page-num")[0].innerText;var part x[i…

huggingface学习|云服务器部署Grounded-Segment-Anything:bug总会一个一个一个一个又一个的解决的

文章目录 一、环境部署&#xff08;一&#xff09;模型下载&#xff08;二&#xff09;环境配置&#xff08;三&#xff09;库的安装 二、运行&#xff08;一&#xff09; 运行grounding_dino_demo.py文件&#xff08;二&#xff09;运行grounded_sam_demo.py文件&#xff08;三…