C语言 字符串

article/2025/11/2 17:08:38

1,一维字符数组

(1)定义

char 数组名 [大小];

(2)初始化字符数组

char s[7]={'h','a','a','p','y'} //其余不确定

char s[ ]=.......         //编译器会计算出数组大小 

static char s[7]={'h','a','a','p','y'}  //其余为0   所代表的是字符   '\0'

2,字符串

(1)特点

  1. 字符串的有效长度==有效字符个数
  2. 字符串由 有效字符 和 字符串结束符'\0'组成
  3. "Happy"由6个字符组成  'H' 'a' 'p' 'p' 'y' '\0'
  4. 字符串输入数组时,数组长度==有效字符数+1

(2)初始化

以"Happy"为例子

static char s[6]={'H','a','p','p','y','\0'}

static char s[6]="Happy"      //注意是双引号

static char s[6]={"Happy"}

(3)字符串输入和赋值

A.输入

 static char s[80];

s[0]='a';

s[1]='\0';

B.赋值

static char s[80];

s="a";

"a"和'a'区别:

"a"是由'a' and '0' 两个字符组成

'a'单指一个字符

(4)其他

static char s[80]="Happy"; 

只对前六个赋值,字符串遇到'\0'结束,所以不用担心。'\0'之后的其他元素和字符串无关。

'\0'不是指ASCII码值,它是字符,它的ASCII码值是0,也就是ASCII码表的第一个字符。'\0'并非是空格,空格的ASCII码值是32,只不过是输出类似于空格。

记得将输入结束符转换为'\0'.

(5)易错

1. 下述对C语言字符数组的描述中错误的是(C)。

A.不可以用关系运算符对字符数组中的字符串进行比较

B.字符数组中的字符串可以整体输入、输出

C.可以在赋值语句中通过赋值运算符"="对字符数组整体赋值

D.字符数组可以存放字符串

A   “不可以用关系运算符对字符数组中的字符串进行比较。可以用关系运算符对字符进行操作,却不能对字符串进行操作

在C语言中,字符数组可以存放字符串。字符数组是对字符串有特殊处理能力的数组。字符数组就是用来对字符串进行操作的,当然可以存放字符串,且可以对字符串进行整体输入、输出。

C 数组的赋值操作是不能整体操作的,而需要对其中元素逐个赋值,字符数组也不例外。

不可以用赋值语句给字符数组整体赋一串字符.
char mark[80];
mark=“happy”;当字符串变量是用的字符数组,不能由赋值语句直接赋字符串常量.
char Str_1[10]=“hello”;
char Str_2[10];
Str_2=Str_1;以上赋值时不允许的

D 字符数组存放字符串方法如下

static char s[6]="Happy";

3,字符串再次探讨

(1)字符串基本特征(补充)

  1. 字符串是以 0或'\0'结尾的一串字符

  2. 0标志字符串的结束,但它不是字符串的一部分。计算字符串长度的时候不包含这个0

  3.  string.h里有很多处理字符串的函数

a[ ]={'h','e','l','l','a'}

b[ ]={'h','e','l','l','a','\0'}

b是字符串,a不是

(2)字符串常量

  • "hello"
  • "happy"会被编译器变成一个字符数组放在某处,长度为6,结尾还有表示结束的'\0'
  • 相邻字符串,无其他符号,则会连在一起
  • #include <stdio.h>
    int main(){printf("你好,很高兴""见到你,我很开心。");return 0;
    } 输出:你好,很高兴见到你,我很开心。
    ​​​​​​​  

 字符串常量以字符数组的形式存在

不能进行运算

按照数组遍历的方法,遍历字符串

(3)字符串变量

char* str="happy" 

#include <stdio.h>
int main(){char* str="happy";  //初始化指向一个字符串常量char* str2="happy";int i=1;printf("i = %p\n",&i);printf("str = %p\n",str);printf("str2 = %p\n",str2);//str[0]='B';   //[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]printf("%c",str[0]);return 0;
} 输出:
i = 000000000062FE0C
str = 0000000000404000
str2 = 0000000000404000

i是本地变量,我们发现变量i的内存地址远远大于str,str2。

而且更改字符串的话,出现了warning

  • 指针str,str2指向了一个很远的地方。叫做代码段。只读,不可更改。所以更改字符串时出现了warning
  • 想要更改,使用字符数组

 

 

 (4)char* 是字符串?

  1. 字符串可以表达为char*
  2. char*不一定是字符串
  3. char* 本意是指向字符或字符数组的(类比 int*,指向整型,或整型数组)
  4. 只有当char* 指向的字符数组,最后一个是'\0'时,才可以称char* 为字符串

 

 

 


http://chatgpt.dhexx.cn/article/4KhgyIy4.shtml

相关文章

C语言计算字符串长度

C语言计算字符串长度 2022-0105 blog_005 方法一&#xff1a; C语言标准库中有一个函数可以计算字符串长度&#xff0c;strlen()。 方法二&#xff1a; 根据字符串总是以 ‘\0’ 结尾&#xff0c;自定义计算方法。 注意 ‘\0’ 一般是看不见的&#xff0c; ‘\0’ 也不算占用…

如何求C语言字符串长度(strlen函数和sizeof关键字)

如何求C语言字符串长度&#xff08;strlen函数和sizeof关键字&#xff09; 在程序里&#xff0c;一般会用***strlen()***函数或***sizeof()***来获取一个字符串的长度&#xff0c;但这2种方法获取的字符串的长度其实是不一样&#xff0c;我们用如下函数进行测试&#xff1a; …

C语言之 字符串长度的计算方法

特别注意 (1)计算字符串长度时关键是要注意辨认转义字符&#xff1b;(2)一个转义字符总是以反斜杠开始&#xff0c;再加一个其他字符组成。所以&#xff0c;遇到反斜杠时要特别注意&#xff01;&#xff01;&#xff01; 1、不带转义字符的字符 如&#xff1a;“abc!x/”,其长…

C语言获取字符串长度的几种方法

在C语言中&#xff0c;想要获取字符串长度可以有很多方法&#xff0c;下面分别介绍 一、使用sizeof()运算符 在C语言中&#xff0c;sizeof() 是长度的运算符&#xff0c;括号中可以放入数据类型或者表达式&#xff0c;一般我们用来计算字符串长度。 基本用法&#xff1a; i…

(C语言)求字符串长度的四种方法

目录 方法一&#xff1a;调用内置函数strlen求字符串长度 方法二&#xff1a;创建临时变量计算字符串长度 方法三&#xff1a;不创建临时变量计算字符串长度&#xff08;递归&#xff09; 方法四&#xff1a;指针减指针求字符串长度 我们知道C语言是自带内置函数strlen求字…

Java内存溢出OOM之dump分析

目录 内存泄露 内存溢出 1.Java堆内存异常 报错方式 原因 2.Java栈内存异常 报错方式 原因 3.方法区内存异常 报错方式 原因 解决思路 生成dump文件三种方式 dump生成 jvisualvm本地方式 1.启动jvisualvm 2.应用程序启动 3.从jvisualvm控制台&#xff0c;进入…

Java内存溢出的几个区域,注意避坑

在开发过程中&#xff0c;时常会遇到内存溢出的问题&#xff0c;有可能是在生产环境&#xff0c;有的就在开发中&#xff0c;今天就聊一聊内存溢出。 存在内存的区域&#xff1a; Java堆溢出 虚拟机栈和本地方法栈溢出 方法区和运行时常量池溢出 本机内存溢出 1、Java堆溢出…

Java内存溢出代码实例

1.什么是内存溢出 JVM运行时可分为虚拟机栈&#xff0c;堆&#xff0c;元空间&#xff0c;程序计数器&#xff0c;本地方法栈等等。在虚拟机管理内存自动内存管理机制下&#xff0c;不需要自己来实现释放内存。但是由于某些操作不当&#xff0c;也可能导致虚拟机异常&#xff…

关于java堆内存溢出的几种情况_详解Java内存溢出的几种情况

JVM(Java虚拟机)是一个抽象的计算模型。就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域。目的是为构建在其上运行的应用程序提供一个运行环境。JVM可以解读指令代码并与底层进行交互:包括操作系统平台和执行指令并管理资源的硬件体系结构。 1. …

java 内存 溢出_java内存溢出的几种原因和解决办法是什么?

java内存溢出的几种原因和解决办法是什么&#xff1f; java内存溢出的几种原因和解决办法是&#xff1a; 第一类内存溢出&#xff0c;也是大家认为最多&#xff0c;第一反应认为是的内存溢出&#xff0c;就是堆栈溢出&#xff1a; 那什么样的情况就是堆栈溢出呢&#xff1f;当你…

java内存溢出之永久代内存溢出

前言 在实际开发中&#xff0c;我们经常会遇到oom&#xff0c;即所谓的内存溢出情况&#xff0c;对于内存溢出&#xff0c;我们需要搞清楚具体内存的溢出原因&#xff0c;然后对症下药。这里和大家一起学习一下永久代内存溢出。 永久代内存溢出概述 对于JVM的分代策略&#…

常见的Java内存溢出情况和实例

文章目录 内存溢出的原因栈溢出栈溢出的第1种情况&#xff0c;死递归&#xff0c;抛出StackOverflowError栈溢出的第2种情况&#xff0c;线程太多&#xff0c;抛出OutOfMemoryError 堆溢出1.初始对象太大&#xff0c;超过机器内存&#xff0c;抛出OutOfMemoryError: Java heap …

java 如何排查内存溢出_java 内存溢出排查

测试代码&#xff0c;如下示例&#xff1a; import java.util.ArrayList; import java.util.List; /** * Description 测试内存溢出, 启动时设置参数&#xff0c;最大堆内存为1m, 内存溢出时dump出内存文件 -Xmx1m -XX:HeapDumpOutOfMemoryError * Author luzy * Date 2018/10/…

java内存溢出 栈溢出的原因与排查方法

java内存溢出 原因与排查方法 1、 内存溢出的原因是什么&#xff1f; 内存溢出是由于没被引用的对象&#xff08;垃圾&#xff09;过多造成JVM没有及时回收&#xff0c;导致剩余的内存不够用&#xff0c;造成的内存溢出。如果出现这种现象可行代码排查&#xff1a; 一&#…

Java内存溢出问题解决办法

Java内存溢出是常见问题&#xff0c;现介绍内存溢出问题的几种解决办法&#xff0c;不仅适用于TongWeb&#xff0c;也适用所有的Java程序。问题具体原因就不再解释了&#xff0c;对于初学者先知道大概解决办法就行了。本文只是举例常见解决办法&#xff0c;实际使用中JDK版本可…

线上java 内存溢出分析

1.Eclipse Memory Analysis Tools (MAT) 是一个分析 Java堆数据的专业工具&#xff0c;用它可以定位内存泄漏的原因。 工具地址 : https://www.eclipse.org/mat/ 2从linxu服务器下载内存溢出文件.hprof&#xff0c;导入到MAT 3.选择”Leak Suspects : includes leak suspect…

docker java 内存溢出_java内存溢出

与此问题类似jmeter Error occurred during initialization of VM Could not reserve enough space_萧木易的博客-CSDN博客 前言 微服务和docker的结合应该是现在服务端的主流技术&#xff0c;随着springboot的出现&#xff0c;有很多公司已经把微服务迁移到了docker容器中&a…

Java 内存溢出(一)原因、复现、排查

目录 一、内存溢出原因二、内存溢出实例1、堆溢出2.虚拟机栈和本地方法栈溢出3.方法区和运行时常量池溢出4.本机直接内存溢出 三、内存溢出排查 内存溢出&#xff1a; 是指应用系统中存在无法回收的内存或使用的内存过多&#xff0c;最终使得程序运行要用到的内存大于虚拟机能提…

Java内存溢出问题排查分析

目录 前言 一、MAT&#xff08;Memory Analyzer Tool&#xff09; 二、软件初识 三、捕获dump文件 1、主动方式 2、被动方式 四、分析dump文件 总结 前言 项目运行过程中&#xff0c;我们可能会遇到Java内存溢出Out Of Memory。此时我们可以借助内存分析工具MAT(Memory Analyz…

ajax书写方式及内部主要参数

书写方式 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> <script src"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"> </script> <script&…