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

article/2025/11/2 16:59:37

特别注意

(1)计算字符串长度时关键是要注意辨认转义字符;(2)一个转义字符总是以反斜杠开始,再加一个其他字符组成。所以,遇到反斜杠时要特别注意!!!

1、不带转义字符的字符

如:“abc!x=/”,其长度为 7

2、带转义字符的字符串

(1) 字符串“abc\n”:其中的'\n'为转义字符(换行符),计算字符串长度时只能计作一个字符,所以该字符串的长度为4(而
不是5)。


(2) 字符串“abc\n\\\'\"":其中有4个转义字符:'\n'(换行符)、'\\'(反斜杠)、'\''(单引号)、'\"'(双引号),所以该字符串的长度为7(而不是11)。


(3) 字符串“abc\0xyz”:其中有一个转义字符'\0',它是字符串结束符,所以,当用函数strlen来测试该字符串的长度时,结果应该为3(而不是7)。


(4) 字符串“abc\\0xy”:其中有一个转义字符'\\'(反斜杠),这样,后面的字符串“0xy”照样计算,所以,该字符串的长度为7(而不是将第二个反斜杠与其后的0结合为一个转义字符'\0',若那样的话,第一个反斜杠将无法处理,因为一个转义字符总是由反斜杠加其他字符组成的,单独的一个反斜杠不能作为任何合法的字符)。


(5) 若将字符串“abc\\0xy”改为“abc\\\0xy”:则其中有二个转义字符'\\'(反斜杠)和'\0'(字符串结束符),这时,当用函数strlen来测试该字符串的长度时,结果应该为4(而不是7)。


(6) 若将字符串“abc\\\0xy”改为“abc\\\061xy”:则其中有二个转义字符'\\'(反斜杠)和'\061'(ASCII码值等于061的字符,也即数字字符'1'),'\x12'(1和2为两个16进制数,同上),这时,当用函数strlen来测试该字符串的长度时,结果应该为7(而不是4或9)。所以,当遇到转义字符'\0'时,还要看其后面是否还有数字,若有,则应将后面的数字(一至二位)与前面的'\0'相结合作为一个字符计入整个字符串的长度。若用printf(“abc\\\061xy”);输出,则输出结果为:abc\1xy

 

注:

C语言中没有字符串,用的是字符数组来模拟字符串

sizeof 计算的是字符串在内存中的长度 即数组长度,返回的是变量声明后所占的内存数,而不是实际长度

strlen 计算的是字符串的有效长度(不包括 '\0' )

由图中关键字高亮也可看出:

sizeof 是运算符(其运算值在编译时就计算好了);

strlen() 是函数(其运算值要在运行时才能计算)。

 

 


http://chatgpt.dhexx.cn/article/Yq1tnI2N.shtml

相关文章

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

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

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

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

Java内存溢出OOM之dump分析

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

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

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

Java内存溢出代码实例

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

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

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

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

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

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

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

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

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

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

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

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

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

Java内存溢出问题解决办法

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

线上java 内存溢出分析

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

docker java 内存溢出_java内存溢出

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

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

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

Java内存溢出问题排查分析

目录 前言 一、MAT(Memory Analyzer Tool) 二、软件初识 三、捕获dump文件 1、主动方式 2、被动方式 四、分析dump文件 总结 前言 项目运行过程中,我们可能会遇到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&…

掌握ajax3:Ajax 中的高级请求和响应

对于很多 Web 开发人员来说&#xff0c;只需要生成简单的请求并接收简单的响应即可&#xff1b;但是对于希望掌握 Ajax 的开发人员来说&#xff0c;必须要全面理解 HTTP 状态代码、就绪状态和 XMLHttpRequest 对象。在本文中&#xff0c;Brett McLaughlin 将向您介绍各种状态代…

Ajax技术简介(http://www.51cto.com)

Ajax技术开发指南Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是结合了Java技术、XML以及JavaScript等编程技术&#xff0c;可以让开发人员构建基于Java技术的Web应用&#xff0c;并打破了使用页面重载的惯例。Ajax是使用客户端脚本与Web服务器交换数据的Web应…

AJAX初级

AJAX介绍 AJAX Asynchronous JavaScript and XML(异步的JavaScript和XML). 同步与异步的区别 同步的理解; 同步就是指一个进程在执行某个请求的时候&#xff0c;若该请求需要一段时间才能返回信息&#xff0c;那么这个进程将会一直等待下去&#xff0c;直到收到返回信息才继…