C语言--字符串详解(多角度分析,什么是字符串?字符串如何存储?字符串如何应用?字符串常用的库函数有哪些?)

news2024/10/7 18:21:56

目录

一、前言

💦什么是字符串 

 💦字符串如何存储?

 二、字符串常量和字符数组

 💦字符串常量

 ✨什么是字符串常量?

✨字符串常量与指针

 💦字符数组

 ✨字符数组的应用

 💦字符串常量与字符数组的区别

三、字符串常用的库函数 

四、共勉 


一、前言

💦什么是字符串 

        字符串是一种非常重要的数据类型,但是C语言不存在显式的字符串类型,C语言中的字符串都以字符串常量的形式出现或存储在字符数组中。同时,C 语言提供了一系列库函数来对操作字符串,这些库函数都包含在头文件 string.h

 💦字符串如何存储?

1️⃣: 内存存储---------字符串常量

2️⃣: 数组存储---------字符数组

 二、字符串常量和字符数组

 💦字符串常量

 什么是字符串常量?

      C 语言虽然没有字符串类型,但是 C语言提是存在字符串这个概念的,也就是字符串常量:以 NUL('\0') 字节结尾的 0 个或多个字符组成的序列。字符串常量是不可被修改的,一般用一对双引号(" ")括起的一串字符来表示字符串常量,如:

"Hello!"、"\aWarning!\a"、"123abc\n"、""

        字符串常量可以为空,如""就是一个空的字符串常量,但是即使为空,还是存在一个终止符 NUL 的。(在 C 语言中,常用转义字符 \0 来表示 NUL)

⭐举例

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

int main() 
{
	// 定义一个 字符串常量   
	char*a = "abc";
	// 输出 字符串常量的 的第一个字符 
	printf("%c\n",*a);
	// 输出整个字符串常量 
	printf("%s\n",a);
	// 输出 字符串常量的长度 、 地址 
	printf("字符串长度%d\n字符串地址%p\n指针变量a地址%p",sizeof(a),&"abc",a);
	return 0;
}

字符串常量与指针

        字符串常量与指针关系密切,因为字符串常量的值,实际上表示的是存储这些字符的内存空间的地址,更准确地说是字符串常量中第 1 个字符的地址,而不是这些字符本身。因此,在 C 语言中是不能直接进行字符串赋值的(因为没有字符串类型嘛)。在 C 语言中,常通过声明一个指向 char 类型的指针并将其初始化为一个字符串常量的方式来访问一个字符串:

char *message = "Hello World!";

// 上面的语句也可以拆分成下面两句
char *message;
message = "Hello World!";    // 这句话看起来像是字符串复制,其实不是,只是涉及到指针操作

        上述语句声明了一个指向 char 类型的指针,并用字符串常量中第 1 个字符的地址对该指针进行初始化。可以通过字符指针 message 来访问字符串常量:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

int main() 
{
	char* message = "Hello string";
	printf("%s\n",message);
	while(*message!='\0')
	{
		printf("%c ",*message++);
	}
	printf("\n");
	return 0;
}

        这段代码,使用字符指针遍历了字符串常量中的每一个字符。
 

 💦字符数组

         用于存放字符的数组称为字符数组。在 C 语言中,除了字符串常量外,其他所有字符串都必须存储于字符数组或动态分配的内存中。定义一个字符数组和定义一个普通数组一样,不同的是字符数组中存放的是字符数据而已:

char str1[] = { 'H','e','l','l','o','\0'};    // 声明并初始化一个字符数组

        这句话定义并初始化了一个字符数组 str1。这个数组的长度实际上为 6 ,(它并不会自动加上'\0',需要手动加上)
        C 语言提供了一种更简洁的方法来对字符数组进行初始化:

char str[] = "hello";    // 声明并初始化一个字符数组

⚠ 注意:上面的这两种初始化是有区别的

int main()
{
	char str[] = "hello";

	printf("%s\n", str);

	char str1[] = { 'H','e','l','l','o'};

	printf("%s\n", str1);
	return 0;
}

我们来调试看一下:

修改正确的代码:

int main()
{
	char str[] = "hello";

	printf("%s\n", str);

	printf("\n");

	char str1[] = { 'H','e','l','l','o','\0'};

	printf("%s\n", str1);
	return 0;
}

 ✨字符数组的应用

 这段代码可以将字符数组中的小写字母转换成大写字母后输出。

#include <stdio.h>
#include <string.h>

int main()
{
        char str[] = "hello world!";
        int len = strlen(str);
        int i;
        for(i = 0; i < len; i++){
                if( str[i] <= 'z' && str[i] >= 'a'){
                        str[i] = str[i] - 32;
                }
        }
        printf("%s\n",str);
}

 💦字符串常量与字符数组的区别

 1)字符串常量是一个字符数组,但是内容和长度在初始化时就已经固定了,不可更改;可以通过一个指向字符串常量第一个元素的指针来访问该字符串常量;


2)字符数组是一个用于存放字符的数组,字符数组的值是可以更改的。(最常用)
 

三、字符串常用的库函数 

可以看我之前写的这篇文章:
字符串常用库函数

四、共勉 

 以下就是我对C语言常用字符串函数的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C语言字符串的小技巧请持续关注我哦!!!!! 

 

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

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

相关文章

Nginx 修改server_name后无法访问

问题&#xff1a; 在nginx.conf配置中, server_name 为 localhost 时可以正常访问&#xff0c;但改成自定义的域名后无法访问 解决方法&#xff1a; - Window系统 修改本地hosts文件&#xff0c;一般路径在&#xff1a;C:\Windows\System32\drivers\etc\hosts 在文件最后…

数据库系统概述之数据库分类

你用过或者了解的数据库都有哪些&#xff1f; 数据库最新统计数量约404个&#xff08;https://db-engines.com/en/ranking&#xff09; 排名前20的数据库管理系统&#xff1a; 未完待续&#xff0c;喜欢的点赞收藏转发&#xff0c;如有疑问&#xff0c;点击链接加入群聊【信创…

python实现梯度距离平方反比法GIDS

1 梯度距离平方反比法 梯度距离平方反比法(gradient plus inverse distance squared (GIDS))由Nalder和Wein于1988年提出&#xff0c;是一种考虑了气象要素随经纬度和海拔高度变化的反距离权重法&#xff0c;其空间插值计算公式如下&#xff1a; 式中&#xff1a; z z z 表示代…

【C++】数组中出现次数超过一半的数字

代码&#xff1a; class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param numbers int整型vector * return int整型*/int MoreThanHalfNum_Solution(vector<int>& numbers) {int …

基于ssm+vue员工工资管理系统

基于ssmvue员工工资管理系统 摘要 随着信息技术的不断发展&#xff0c;各行各业对于高效管理和利用数据的需求也日益增长。员工工资管理系统作为企业管理中的一个重要组成部分&#xff0c;对于实现工资信息的精确计算、及时发放和有效管理具有重要意义。本文基于SSM&#xff08…

程序员导航站

探路者 hello.alluniverse.vip 开发者导航 - Pro Developer网站导航 探路者是一款极简导航工具&#xff0c;致力于收录的每个站点都有其独特的作用。同时支持自定义导航&#xff0c;让用户快速实现个性化的导航站点。 特性概述 免费ChatGPT 装机必备 开发工具 Git精选项目 …

Unity 代码控制Text文本换行

Unity 要通过代码控制Text文本换行&#xff0c;实现方法比较简单&#xff0c;无论是传统的Text&#xff0c;还是TMP文本&#xff0c;都是通过在字符串需要换行的地方加上换行符【\n】。 不过在Text属性栏中要确保设置自动换行模式&#xff1a; 如传统的设置如图&#xff1a; …

【AI视野·今日CV 计算机视觉论文速览 第278期】Mon, 30 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Mon, 30 Oct 2023 Totally 50 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Image Clustering Conditioned on Text Criteria Authors Sehyun Kwon, Jaeseung Park, Minkyu Kim, Jaewoong Cho, Ernest…

Linux - 文件系统

前言 文件系统 我们先来看两个例子&#xff1a; 这个程序输出&#xff1a; 此时的输出也满足的我们预期。 我们也可以把 程序执行结果&#xff0c;输出重定向到 一个文件当中: 当我们在代码的结尾处&#xff0c;创建了子进程&#xff0c;那么输出应该还是和上述是一样的&…

【打卡】牛客网:

自己写的&#xff1a; 虽然题目要求了排序&#xff0c;但是我没排序也可以通过。 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param num int整型vector * return int整型vector<vec…

Java8Stream快速使用

将List集合存入流中 List<String> list new ArrayList<>();list.add("张一");list.add("张二");list.add("张三");list.add("李四");list.add("赵五");list.add("张六");list.add("王八"…

腾讯云新客户优惠服务器88元/年,540元/3年,另有5年优惠服务器

在选择云服务器时&#xff0c;首先需要考虑的是性能与配置是否与自己的需求相匹配。对于小型网站或者个人博客&#xff0c;轻量应用服务器是一个不错的选择。腾讯云双十一活动中&#xff0c;2核2G轻量应用服务器的活动优惠价为88元/年&#xff0c;2核4G轻量应用服务器的活动优惠…

运行游戏“找不到XINPUTI_3.dll无法继续执行代码,总共有五种解决方案

xinput1_3.dll是Windows操作系统中的一款动态链接库&#xff08;DLL&#xff09;文件&#xff0c;主要作用是为DirectX输入提供支持。DirectX是微软推出的一套多媒体应用程序开发接口&#xff0c;广泛应用于游戏、多媒体制作等领域。xinput1_3.dll文件包含了许多与输入设备相关…

java学习part04

1.进制 计算机底层都是二进制&#xff0c;输出统一十进制 2.算符 3.逻辑算符 4.位运算符 38-变量与运算符-位运算符的使用_哔哩哔哩_bilibili 5.条件运算符

【C++面向对象】14. 命名空间

文章目录 【 1. 命名空间的定义 】【 2. using 指令 】2.1 using 指定命名空间的全部2.2 using 指定命名空间的部分 【 3. 不连续的命名空间 】【 4. 嵌套的命名空间 】 问题的背景&#xff1a;假设这样一种情况&#xff0c;当一个班上有两个名叫 Zara 的学生时&#xff0c;为了…

YOLO改进系列之注意力机制(CoTAttention模型介绍)

简介 CoTAttention网络是一种用于多模态场景下的视觉问答&#xff08;Visual Question Answering&#xff0c;VQA&#xff09;任务的神经网络模型。它是在经典的注意力机制&#xff08;Attention Mechanism&#xff09;上进行了改进&#xff0c;能够自适应地对不同的视觉和语言…

黑客常用信息收集工具-02

信息收集是突破网络系统的第一步。黑客在进入目标主机之前,通常会使用一些专门的黑客工具对目标主机进行扫描,从扫描结果中分析这些计算机的弱点,从而确定进入目标主机的方法和手段。 接上文&#xff1a;黑客常用信息收集工具-01 tcpdump&#xff0c;tcpdump 可以抓所有层的数…

2013年11月10日 Go生态洞察:Go语言四周年回顾

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【源码系列】情侣游戏小程序系统开发飞行棋扫雷大冒险

系统介绍 情侣游戏小程序系统&#xff0c;为情侣们提供了一种全新的互动方式。通过专属的游戏体验、创新的游戏玩法、丰富的道具与场景、个性化定制以及实时互动与社交等功能&#xff0c;该系统让爱情在棋盘上飞舞&#xff0c;为情侣们带来了更多的乐趣和益处。随着技术的不断…

这款开源神器,让聚类算法从此变得简单易用

Scikit-Learn 以其提供的多个经过验证的聚类算法而著称。尽管如此&#xff0c;其中大多数都是参数化的&#xff0c;并需要设置集群的数量&#xff0c;这是聚类中最大的挑战之一。 通常&#xff0c;使用迭代方法来决定数据的最佳聚类数量&#xff0c;这意味着你需要多次进行聚类…