字符串中的转义字符与字符串的长度

简介: 提示: (1)计算字符串长度时关键是要注意辨认转义字符; (2)一个转义字符总是以反斜杠开始,再加一个其他字符组成。所以,遇到反斜杠时要特别注意!!! 示例: 1、不带转义字符的字符串   如:“abc!x=/”,strlen求其长度为 7,但是因为字符串在末尾还有一个终止符‘\0’,因此字符串占8个字节,长度为8.

提示:

(1)计算字符串长度时关键是要注意辨认转义字符;

(2)一个转义字符总是以反斜杠开始,再加一个其他字符组成。所以,遇到反斜杠时要特别注意!!!

示例:

1、不带转义字符的字符串

  如:“abc!x=/”,strlen求其长度为 7,但是因为字符串在末尾还有一个终止符‘\0’,因此字符串占8个字节,长度为8.

 

2、带转义字符的字符串

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

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

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

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

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

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

    若用printf(“abc\\\061xy”);输出,则输出结果为:abc\1xy

注意使用strlen求字符串长度是是不计算末尾的终止符的,但是字符串所占的字节数是包括终止符。

 

例题一:[1995年二级C笔试选择题(26)]

请选出以下语句的输出结果(  )

printf("%d\n",strlen("\t\"\065\xff\n"));

(A) 5  (B) 14  (C) 8  (D) 输出项不合法,无正常输出

正确答案是(A):字符串中包含的5个字符是:'\t'(跳格符)、'\"'(双引号)、'\065'(ASCII值为八进制065,也即十进制为51的字符)、'\xff'(ASCII值为十六进制ff,也即十进制为255的字符)、'\n'(换行符)。

例题二:[1998年二级C笔试选择题(44)]

若有以下程序段:

char str[]="ab\n\012\\\"";

printf("%d",strlen(str));

上面程序段的输出结果是

A) 3 B) 4 C) 6  D) 12

正确答案是(C):字符串中包含的6个字符是:'a'、'b'、'\n'、'\012'、'\\'和'\"'。如果这一问题是问字符串的长度,则为7。

目录
相关文章
|
11月前
|
算法 测试技术 定位技术
数据结构与算法——DFS(深度优先搜索)
数据结构与算法——DFS(深度优先搜索)
|
SQL 分布式计算 调度
Spark入门(一篇就够了)(三)
Spark入门(一篇就够了)(三)
670 0
|
监控 Serverless Docker
函数计算操作报错合集之遇到报错:Python Jedi client: couldn't create connection to server.是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
777 0
|
12月前
|
算法 安全 数据安全/隐私保护
TLS 1.3 相比 TLS 1.2 在性能上有哪些提升
TLS 1.3 相比 TLS 1.2 在性能上有哪些提升
428 4
|
消息中间件 安全 Java
线程和进程的区别及应用场景
线程和进程的区别及应用场景
|
安全 网络安全 数据安全/隐私保护
如何判断一个数字证书是否有效?
【5月更文挑战第9天】如何判断一个数字证书是否有效?
1434 1
|
网络协议 前端开发 数据安全/隐私保护
技术笔记:SOCKS5协议解析
技术笔记:SOCKS5协议解析
487 0
|
机器学习/深度学习 存储 编解码
利用深度学习优化视频压缩算法
【4月更文挑战第28天】随着数字媒体时代的到来,视频数据量急剧增加,有效的视频压缩技术变得尤为重要。本文探讨了一种基于深度学习的视频压缩框架,旨在提高压缩效率同时保持较高的视频质量。通过使用卷积神经网络(CNN)对视频帧进行特征提取,并结合先进的编码技术,本研究提出了一种新的率失真优化算法。实验结果表明,该算法在多个标准测试序列上相比传统方法能显著降低比特率,同时维持了良好的视觉质量。
|
Linux Go Windows
frp 编译
frp 编译
765 1
|
NoSQL Java 程序员
为什么引入Redisson分布式锁?
Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包含了各种各样的分布式锁的实现。
为什么引入Redisson分布式锁?