C风格的字符串赋值方式

news2025/1/22 20:45:06

文章目录


(1)C语言中,没有字符串类型但可以用字符数组模拟字符串。
(2)C语言中,字符串是以’\0’作结尾字符。
(3)C语言中,字符串常量本质上是一个无名的字符数组。

C风格的字符串有两种声明方式:
1. char str1 [] = “abc”;或 char str2[]={‘a’,‘b’,‘c’,‘\0’};//数组赋值
2. char * str3 =“abc”;
这两种方式都表示的是字符串数组。字符数组和字符串的区别 就看最后一个元素后面是否存在’\0’,有’\0’就是字符
串,没有就是普通数组。
如上 char arr[] ={‘a’,‘b’,‘c’};就是表示的是普通字符数组,但不是字符串。
如果字符数组中没有’\0’结尾,那该字符数组就是普通的字符数组,不是字符串。
字符串和字符数组很相似,但是有本质上的区别。
(1) C语言中,字符串是双引号括起来的单个或多个字符的集合,编译器自动在结尾加上’\0’字符。字符串常量存储在只读数据段,无法通
过指针进行修改字符串中的某个字符。
(2)C语言中,不能定义字符串(没有string关键字,C++才有),但是在C语言中使用字符串,通常会用字符数组来模拟字符串,必须
是’\0’结尾的字符数组,这个字符数组存储通常会分配在栈区(例如:char str [] = “abc”; 中的str就存储在栈区),也可以被称为字符
串,且该字符串中的字符是可以修改的。
C 语言中并不存在字符串这个数据类型,而是使用字符数组来保存字符串。那么,字符数组就一定是字符串吗?答:字符串一定是字符数组,但是字符数组不一定是字符串。
在这里插入图片描述
现在的编译器,已经不允许 使用 char * str = “abc”;这种形式声明定义字符串了,必须前面 加上 const。这也是标准的
方式:const char * str = “abc”;即使 char * str = “abc”; 在编译期,不报错,但是想通过 str[0] = ‘f’;修改静态区的字符串常量时,会报错。
所以这里最好在 char * str 前面 加上const。解决编译器不错报,而运行期报错的问题。
求普通数组和字符串的长度的方法:
如int a[] = {1,2,3,4}; char b[] = {‘a’,‘b’,‘c’};
正确方法是:数组a长度 = sizeof(a)/sizeof(a[0]) 或 sizeof(a)/sizeof(int)
数组b长度 = sizeof(b)/sizeof(b[0]) 或 sizeof(b)/sizeof(char)
字符串的长度计算:用strlen()方法。
函数原型 unsigned int strlen (char s);
strlen()方法说明:从字符串的开头位置依次往后面计数,直到遇到’\0’停止,所计算的字符串大小为’\0’以前的字符所计算的值,最终的字符串长度不包括’\0’;
例如:
char str1[] = {‘a’,‘b’,‘c’,‘d’,‘\0’};//strlen(str1) == 4 ,而sizeof(str1)= = 5 ,原因是sizeof运算符统计占用字节数时,含’\0’。
char str2[] = {‘a’,‘b’,‘\0’,‘c’,‘d’,‘\0’};//strlen(str2) == 2
char str3[] = {‘a’,‘b’,‘\0’,‘c’,‘d’};//strlen(str3) == 2
char str4[] =“abcd”;//strlen(str4) == 4,而sizeof(str1)= =5 原因同上
char
str5 = “abcd”;;//strlen(str5) == 4 ,而sizeof(str1) == 5 原因同上
注意:不要用此方法求普通字符数组的长度,有可能有的编译器会正确执行strlen()函数,但是这个方法是用来求字符串的长度的,不是用来求数组的长度的。上面的str1,str2,str3,str4 都是数组类型 ,因为数组名,就是数组首元素的地址(而且数组名,不用于自增或自减操作,数组名是一个指针常量,指向不能发生修改,形如:str1++,str1=str1+1;str4++;都是错误的,而str5++;str5=str5+1是合法的,这也是字符串两种赋值方式的其中一点不同之处),在传入strlen函数时,把数组名赋值给char * s变量 是可以的。

还有一个printf(“%s”,str1);//会输出abcd。底层原理,str1自动加1,把读取的元素,先缓存起来,直到遇到’\0’,时,把缓存起来的数据,打印到控制台上。
如果给上面的char b[] = {‘a’,‘b’,‘c’}; 使用 printf(“%s”,b);是不正规的,有的编译器会报错。正确的打印普通字符数组的方法是通过for循环,遍历打印。

还有形如: char * str5 = “中abc”;//就是这种字符串中含中文的,那么一个中文在UTF8编码下,这里占3个字节。用strlen计算其长度时出现6。而sizeof(str5) == 7; str5[0]的输出并不是“中”,而是中字所占的3个字节的,第一个字节。所以这里不能通过索引获取中文字。但是通过
printf(“=%s”,str5);//可以打印出 “中abc”,底层原理,将缓存起来的字节,按照unicode方式下的utf-8编码规则来解码,打印。

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

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

相关文章

使用Spring JDBC中的JdbcTemplate对数据进行增删改查操作教程~

jdbcTemplate实现添加数据功能: spring框架对jdbc框架进行封装,使用jdbcTemplate方便实现对数据库的操作 数据库准备工作: 在已有数据库中创建新的表: create table t_user (id int,username varchar(20),password varchar(20…

搜索词分析工具-网站关键词挖掘

怎么能找到行业的关键词 以下是如何找到行业关键词的建议: 了解行业:要找到与行业相关的关键词,首先需要了解行业。了解行业以及核心目标,从而更好地理解行业中的主题和词汇。 找到竞争对手网站:搜索竞争对手的网站&…

k8s部署Dashboard

k8s和Dashboard的版本对应关系可以到Dashbord的对应版本里看,比如这里: https://github.com/kubernetes/dashboard/releases/tag/v2.7.0 以下步骤都是在master上执行的。 1. 部署步骤 1. 获取Dashbord的yaml文件 wget https://raw.githubusercontent…

【Git】—— 如何安装Git及简单使用

Git是一个开源的分布式版本控制工具,可以更好地管理你的项目。 一、Linux操作系统 如果用的是Ubuntu系统,只需打开shell界面,输入: sudo apt-get install git-core 按下回车即可完成安装。 二、Windows操作系统 Windows操作系统不…

C语言-数据结构与算法-详细全面的链表知识总结归纳

C语言链式存储结构的详细讲解一.前言(为什么要使用链式存储)一.单链表1.单链表的结点描述2.单链表基本操作(1)初始化单链表(2)采用头插法建立单链表(带头结点)(3).采用尾插法建立单链表(4)按照位序查找结点(4)在链表中间插入结点(5)删除第i个结点二.双链表1.双链表的结点类型描…

和ChatGPT-4聊完后,我觉得一切可能已经来不及了

了然无味,晴空万里!和ChatGPT-4开始了一场坦诚的沟通,它全程都表现出高情商,以及不断尽量安抚我的情绪,而这,恰恰令我脊背发凉。 部分文字截取 ZM:我能不能理解每次对话就是一次你的“生命” G&…

【Android -- 软技能】分享一个学习方法

前言 很多人都想通过学习来提升自己,但是,可能因为两个问题,阻碍了自己的高效提升: 学什么? 怎么学? 本文将从自己的学习实践出发,针对这两个问题,给出自己的一套学习流程。 1…

免费集装箱号识别API免费集装箱信息识别,中国人工智能企业CIMCAI集装箱识别云服务全球4千企业用户,中国人工智能企业智慧港航

免费集装箱号识别API免费集装箱信息识别API,CIMCAI飞瞳引擎™集装箱人工智能平台全球4千企业用户,全球领先的飞瞳引擎™AI集装箱识别云服务,集装箱残损识别箱况检测缺陷检验,小程序拍照检测或支持API接口二次开发,应用…

00后整顿职场,我直呼太卷了....

内卷的来源 内卷最早的“出处”是几张名校学霸的图片。 大学生们刷爆朋友圈的几张“内卷”图片是这样的:有的人骑在自行车上看书,有的人宿舍床上铺满了一摞摞的书,有的人甚至边骑车边端着电脑写论文。这些图片最早在清华北大的学霸之间流传。…

AI工具究竟是帮手还是对手?对此你怎么看,一起来聊聊你的看法吧!

© Ptw-cwl 前言 AI工具既可以是帮手,也可以是对手,这取决于我们如何使用它们。 如果我们正确地利用AI工具,它们可以为我们带来很多好处,例如更快的数据分析、更准确的预测和更高效的决策。然而,如果我们滥用AI工…

嵌入式开发:硬件和软件越来越接近

从前,硬件和软件工程师大多生活在自己的世界里。硬件团队设计了芯片,调试了从铸造厂返回的第一批样本,让软件团队测试他们的代码。随着虚拟平台和其他可执行模型变得越来越普遍,软件团队可以在芯片制造之前开始,有时甚…

贝叶斯优化 | BO-RF贝叶斯优化随机森林多输入单输出回归预测(Matlab完整程序)

贝叶斯优化 | BO-RF贝叶斯优化随机森林多输入单输出回归预测(Matlab完整程序) 目录 贝叶斯优化 | BO-RF贝叶斯优化随机森林多输入单输出回归预测(Matlab完整程序)预测结果基本介绍评价指标程序设计参考资料预测结果 基本介绍 贝叶斯优化 | BO-RF贝叶斯优化随机森林多输入单…

面试题

用 C写一个函数&#xff0c;交换两个整型变量 int a 5, b 10; cout << "Before swapping: a " << a << ", b " << b << endl; swapVars<int>(a, b); cout << "After swapping: a " << a …

半透明反向代理 (基于策略路由)

定义 半透明反向代理一般是指 代理本身对于客户端透明&#xff0c;对于服务端可见。 从客户端视角看&#xff0c;客户端访问的还是服务端&#xff0c;客户端不知道代理的存在。 从服务端视角看&#xff0c;服务端只能看到代理&#xff0c;看不到真实的客户端。 示意图 客户端…

【C语言】switch语句的理解

文章目录一. 基本语法结构二. 几点补充补充一&#xff1a;关于 default 分支补充二&#xff1a;多条匹配执行同一语句补充三&#xff1a;在 case 语句中定义变量的问题三. 几点建议建议一&#xff1a;按执行频率排列 case 语句细节二&#xff1a;简化每种情况对应的操作细节三&…

Node【四】内置模块 【fs模块】

文章目录&#x1f31f;前言&#x1f31f;fs模块&#x1f31f; 使用fs模块&#x1f31f; 异步编程和同步编程&#x1f31f; 异步编程&#x1f31f; 同步编程&#x1f31f;常用操作&#x1f31f; 文件操作&#x1f31f; readFile异步读取文件&#x1f31f; readFileSync同步读取文…

[数据分析与可视化] Python绘制数据地图2-GeoPandas地图可视化

本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化。GeoPandas是一个Python开源项目&#xff0c;旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型&#xff0c;并使用matplotlib进行绘图。GeoPandas官方仓库地址为&#xff1a;GeoPandas。G…

HTML5 <iframe> 标签、HTML5 <input> 标签

HTML5 <iframe> 标签 实例 使用HTML5 <iframe>标签来标记一个内联框架&#xff1a; <iframe src"http://www.w3cschool.cn"></iframe>尝试一下 浏览器支持 所有主流浏览器都支持 <iframe> 标签。 标签定义及使用说明 <iframe&g…

【数据结构初阶】第五节.栈的详讲

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、栈的基本认识 二、栈模拟实现&#xff1a; 三、栈的实战演练 3.1 有效的括号 3.2 逆波兰表达式 3.3 栈的压入、弹出序列 总结 前言 上一节内容我…

【产品设计】登录功能设计逻辑解析

登录功能是每个产品的基础功能&#xff0c;用户已经习以为常了&#xff0c;但对于产品经理来说&#xff0c;这是打开用户通往产品世界大门的“钥匙”&#xff0c;需要好好设计。 在用户看来&#xff0c;登录像是一个一次性的功能&#xff0c;很多 APP 在手机上登录过一次之后&a…