C语言字符串详解

news2025/1/15 23:29:05

字符串详解

定义

输入输出

思考一:

 思考二:

思考三

字符串的转义字符

思考四

常见的字符串函数

strcpy  拷贝数组

strlen  输出字符串长度

strcat 连接俩个字符串

strcmp 比较俩个字符串的大小

strupr  把字符串里面的小写转换成大写形式

strlwr  把字符串里面的大写转换成小写形式

字符串数组

进阶 指针

指针使用:

常见误区:

思考五:

字符串详解

定义

C 语言没有单独的字符串类型,字符串被当作字符数组,即char类型的数组

  • char str[20]="helloworld";
  • char str[20]={"hello"};
  • char str[20]={'h','e','l','l','o'};

双引号是代表是一个字符串常量,单引号代表是一个字符常量。

编译器会给数组分配一段连续内存,所有字符储存在相邻的内存单元之中。在字符串结尾,C 语言会自动添加一个全是二进制0的字节,写作'\0'字符,表示字符串结束。字符'\0'不同于字符0前者的 ASCII 码是0(二进制形式00000000),后者的 ASCII 码是48(二进制形式00110000

在定义时若是担心数组大小不够  可以用下面这种写法:

char s[]="hello,acm";

编译器会自动给大小 ,这个大小是刚好合适的 是10.

ASCII 码对照表

史上最全ASCII码对照表0-255(%d)-CSDN博客 

输入输出

输入输出字符的时候 上面俩种写法是相同的

但是输入字符串的时候 scanf 和 gets 是有区别的

gets 的输入分隔符 只有回车,所以  gets  是能够读入空格的,    gets  是可以读取到 空的回车的

scanf 输入分隔符 可以是回车也可以是 空格,scanf 是不能读取到 空的回车的。

puts 在输出字符串的时候 会给你自动加 回车符号 

printf 不会自动加回车

思考一:

如果我输入 回车 回车 123 456  答案会是什么

 思考二:

这样写算是对的吗? 如果是对的,那你觉得会输出什么呢

思考三

如果我想输入 123 和 'l' 的值  上面的这串代码能输入正常吗 ,如果不能,为什么。

字符串的转义字符

C语言——转义字符_c语言转义字符-CSDN博客

比较常用的转义字符:

  • \n  回车
  • \0  结束符
  • \\   输出一个\ 
  • \0 开头 或者 \接1-3位数字 代表是8进制
  • \x 开头 是十六进制数字 没有位数要求
思考四

下面的输出结果是什么 ,为什么

常见的字符串函数

strcpy  拷贝数组

用法:

strlen  输出字符串长度

和sizeof不同的是  strlen 是输出字符串长度  ,以 \0 作为结束符,sizeof 纯粹的是计算 占用的空间大小。char 类型 字符占用一个字节。

strcat 连接俩个字符串

strcmp 比较俩个字符串的大小

按照ASCII码来比较的。如果相等会返回 数字 0 因为编译器的不同 ,有些编译器小于的结果就是 -1 大于的结果就是 1 ,另外一些编译器返回的是 出现第一个不相同的字符的ASCII码的 相减的结果。

strupr  把字符串里面的小写转换成大写形式

strlwr  把字符串里面的大写转换成小写形式

字符串数组

如果一个数组的每个成员都是一个字符串,则需要通过二维的字符数组实现,每个字符串本身就是一个字符数组,多个字符串再组成一个数组。

定义

char str[10][20]={"hello","acm","!"};

只能省略 第一个中括号的数字 ,第二个不能省略。省略第二个参数会给你自动加,就像字符串会自动计算长度。

使用,正常和整形一维数组一样使用

进阶 指针

指针是什么?首先,它是一个值,这个值代表一个内存地址,因此指针相当于指向某个内存地址的路标。

*这个符号除了表示指针以外,还可以作为运算符,用来取出指针变量所指向的内存地址里面的值。

&运算符用来取出一个变量所在的内存地址

上面定义字符串还可以这样定义:

char *s="1234";

上面代表的是一个指针,指向字符串常量“1234”

下面这样定义的也是对的

我们在使用字符串变量的时候 比如 说这个 

char a[20]="1234"   这个 a 是一个地址,但是这个a 不能修改地址,上面的 s 是可以的,因为 a 具体的 定义是 const char *a  ,  被const 修饰的值 是不能修改的,const 加在哪里,哪个位置就不能动。

指针一定要有指向才能使用,否则就是一个野指针。

上面是因为 a 是地址,所以可以直接指向

这个是因为 ch 是一个变量,而 p 只能被地址赋值,就需要使用地址符号来取出地址,来进行赋值

指针使用:

常见误区:

上面这段代码 因为指针并没有 指向,然后就被 强制要往里面塞值,可是指针本身是不能塞值的,只能依附于有内存空间的去操作,所以这里,编译不会出错,这个 s 是无值的

指针的东西很多,我这里也只是择取了一点,希望大家能够自己去主动学习指针内容。

思考五:

下面这段代码会输出什么呢,为什么?

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

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

相关文章

[ZenTao]禅道邮件通知设置

代码增加通知设置节点 module/message/config.php

正则表达式的使用实例

正则表达式的使用实例 1- 表示2- 实例 1- 表示 1, [:digit:] 表示0-9全部十个数字 //等价于 0123456789, 而不等价于[0123456789] 2, [[:digit:]] 表示任意一个数字 \{m,n\} 表示其前面的字符出现最少m次,最多n次的情况 \{3,\} 其前面的字符出…

git命令清单

一、设置和配置 1.初始化一个新的仓库&#xff1a; git init2.克隆&#xff08;Clone&#xff09;一个远程仓库到本地&#xff1a; git clone <repository_url>3.配置用户信息&#xff1a; git config --global user.name "Your Name" git config --global…

SpringBoot / Vue 对SSE的基本使用

一、SSE是什么&#xff1f; SSE技术是基于单工通信模式&#xff0c;只是单纯的客户端向服务端发送请求&#xff0c;服务端不会主动发送给客户端。服务端采取的策略是抓住这个请求不放&#xff0c;等数据更新的时候才返回给客户端&#xff0c;当客户端接收到消息后&#xff0c;再…

深入内核buddy分配器(芯驰X9/杰发8015 buddy系统明明还有几十M到100多M内存,却分配4k内存失败)

如上图内核打印分配4K内存失败&#xff0c;但是normal 类型的buddy系统还有大量内存。居然分配失败。源码分析&#xff1a; 根据logfaddr2line定位到&#xff0c;调用栈为__alloc_pages_slowpath——》get_page_from_freelist——》zone_watermark_fast 可以看到buddy内存低于…

node使用fs模块(一)—— 写入文件的基本使用

文章目录 前言一、写入文件的使用&#xff08;fs.writeFile&#xff09;1.参数说明2.基本使用(1)新建app.js 文件(2)代码如下(3)执行命令(4&#xff09;效果 3.写入文件的同步和异步&#xff08;1&#xff09;默认异步&#xff08;2&#xff09; 同步方法&#xff08;writeFile…

【HeidiSql_01】python在heidisql当中创建新表的注意事项

python在heidisql当中创建新表的注意事项 假设你已经在python当中弄好了所有的结果&#xff0c;并且保存在df_all这个dataframe当中&#xff0c;然后要将其导入数据库当中并创建一张新的表进行保存。 # 构建数据库连接,将merged_df写回数据库 from sqlalchemy import create_e…

5000张照片怎么快速发给别人?分享三个简单的方法!

有的时候我们不得不一次性发送很多图片&#xff0c;一张一张发实在让人头疼&#xff0c;这个时候就需要借助一些图片压缩工具打包成文件压缩包发送。下面介绍了三种好用的方法&#xff0c;一起来看看吧&#xff5e; 方法一&#xff1a;使用微信助手 可以使用微信助手&#xff…

设计思想培养:装饰者模式下的RecyclerView添加头、尾

用一个设计模式培养高复用、低耦合思想 前言Android中的装饰者代码实现第一步&#xff1a;创建装饰器DecorateAdapter第二步&#xff1a;处理头部、中间内容、尾部的绑定关系第三步&#xff1a;装饰器的使用第四步&#xff1a;改进、直接封装一个View出来 总结 前言 一个高复用…

操作系统备考学习 day11 (4.1.1~4.1.9)

操作系统备考学习 day11 第四章 文件管理4.1文件系统基础4.1.1 文件的基本概念文件的属性文件的逻辑结构操作系统向上提供的功能文件如何存放在外存 4.1.2 文件的逻辑结构顺序文件索引文件索引顺序文件 4.1.3 文件目录文件控制块单级目录结构两级目录结构多级目录结构 又称树形…

2023年四川省网络与信息安全技能大赛 决赛个人赛Writeup

文章目录 Web前端验证PHP_Try MiscHelloWorld密码在这easy_log Cryptobaser 线下“断网”CTF个人赛&#xff0c;题都很简单(新手级难度)&#xff0c;总共10道题目&#xff0c;解了6题。 赛题附件请自取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1lgNEBO7a1L4KLE2t…

Chrome如何解决http自动转为https问题

开发中总遇到http被浏览器转为https导致无法访问404 具体配置如下&#xff1a; 就能正常访问你的http不安全地址

逻辑(css3)_强制不换行

需求 如上图做一个跑马灯数据&#xff0c;时间、地点、姓名、提示文本字数都不是固定的。 逻辑思想 个人想法是给四个文本均设置宽度&#xff0c;不然会出现不能左对齐的现象。 此时四个文本均左对齐&#xff0c; 垂直排列样式也比较好看&#xff0c;但是出现一个缺点&#…

eDNA放大招:看完这篇文献,你的茶包还香吗?

eDNA在过去几年彻底改变了生物监测领域&#xff0c;一起来看它在生活中的应用吧。节肢动物&#xff08;无脊椎动物&#xff0c;如昆虫、甲壳类等&#xff09;在全球生态系统平衡维护中发挥重要作用。eDNA作为传统节肢动物监测的替代方案发挥出巨大的潜力。 最近一项发表于《Bi…

设备树(以STM32MP1为例)

1.设备树&#xff08;Device Tree&#xff09; 是一种用于描述硬件信息和配置的数据结构&#xff0c;以提供一个统一的方式来描述各种硬件设备的特性和连接方式。 设备树并不是从开始就存在&#xff0c;而是后来加入到Linux中&#xff0c;设备树主要用来描述系统的硬件结构 它是…

Hikari源码分析

总结 连接池关系 1、HikariDataSource构建函数->生成HikariPool对象->调用HikariPool的getConection得到连接 2、HikariPool包含ConcurrentBag 3、ConcurrentBag保存连接&#xff1a;三个集合threadList、sharedList、handoffQueue 4、ConcurrentBag管理连接&#xff1…

maven:编译出现Process terminated解决方法(超全)

maven:编译出现Process terminated解决方法&#xff08;超全&#xff09; 一. 情况一&#xff1a;配置文件 settings. xml 出错&#xff08;解决方法1&#xff09;1.1 项目编译报错如下&#xff1a;1.2 点击【项目名】提示找到出错文件1.3 点击查看出错文件1.4 原因及解决办法 …

LeetCode 2401.最长优雅子数组 ----双指针+位运算

数据范围1e5 考虑nlog 或者n的解法&#xff0c;考虑双指针 因为这里要求的是一段连续的数组 想起我们的最长不重复连续子序列 然后结合一下位运算就好了 是一道双指针不错的题目 class Solution { public:int longestNiceSubarray(vector<int>& nums) {int n nums…

微信朋友圈如何关闭?

怎样关闭微信朋友圈&#xff1f;由于一些比较特殊的原因&#xff0c;有些人不想再发朋友圈了&#xff0c;或者想跟过去的自己说“拜拜”&#xff0c;所以就想把微信朋友圈给关掉。虽然这种需求的人并不多&#xff0c;但却真实存在着。 微信早期版本是有关闭朋友圈开关的&#x…

【C# Programming】委托和lambda表达式、事件

目录 一、委托和lambda表达式 1.1 委托概述 1.2 委托类型的声明 1.3 委托的实例化 1.4 委托的内部机制 1.5 Lambda 表达式 1.6 语句lambda 1.7 表达式lambda 1.8 Lambda表达式 1.9 通用的委托 1.10 委托没有结构相等性 1.11 Lambda表达式和匿名方法的内部机制 1.1…