c - 为什么字符串文字可能不是字符串?
问题描述
我在 C 标准中关于字符串文字的这一部分苦苦挣扎,尤其是它的第二部分:
"在翻译阶段 7 中,一个字节或零值代码被附加到每个由一个或多个字符串文字产生的多字节字符序列。80) "
" 80) 字符串文字可能不是字符串(参见 7.1.1),因为可以通过
\0
转义序列将空字符嵌入其中。来源:ISO/IEC 9899:2018 (C18),§6.4.5/6,第 51 页
我不明白解释-“因为可以通过\0
转义序列将空字符嵌入其中。 ”。
要查看参考的第 7.1.1 节,关于“字符串”的定义,说明:
"字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。 "
资料来源:ISO/IEC 9899:2018 (C18),§7.1.1/1,第 132 页
我考虑过重点可能放在“ can ”上,字符串文字不必包含/嵌入空字符,而需要字符串。
但是我又一次问自己:如果字符串中没有以字符串结尾的空字符,如何将字符串文字用作字符串来确定字符串的结尾(字符串操作函数需要)?
我现在完全是空白。
注意:我知道字符串文字存储在只读内存中并且不能修改,并且字符串是由 NUL 终止的字符序列的通用术语,它可以是可变的,也可以不是可变的。
因此,我的问题不是:“字符串和字符串文字有什么区别? ”
我的问题是:
- 为什么/如何字符串文字不是字符串?
并且,根据我的担忧,到目前为止:
- 字符串文字可以省略 NUL 字节,这是真的吗?
我想自己问这个问题,但在发布之前不久,我得到了线索。我的困惑是因为引文中的一些错位的措辞。
但我决定不删除问题的草稿,因为它可能对未来的读者有用,而是提供问答。
随意评论和提示。
相关资料:
解决方案
你想多了。
“字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。”
资料来源:ISO/IEC 9899:2018 (C18),§7.1.1/1,第 132 页
表示“字符串”只能延伸到第一个空字符。在 null 之后可能存在的字符不是字符串的一部分。然而
"80) 字符串文字可能不是字符串(参见 7.1.1),因为可以通过 \0 转义序列将空字符嵌入其中。
清楚地表明字符串文字可能包含嵌入的空值。如果是这样,则字符串文字AS A WHOLE不是字符串——字符串只是字符串文字的前缀,直到第一个 null
推荐阅读
- node.js - 如何将 S3 托管的前端连接到 Elastic beanstalk 托管的后端?
- r - 如何获得具有交互作用的非线性混合模型(逻辑增长曲线)的置信区间
- unix - Tokio FramedRead.for_each 无限期地调用单个响应
- python - 如何在python中提升发布请求
- java - 使用 spring-actuator 不工作时禁用默认密码生成
- python - 如何提取元组的第一个元素,它是 Python 数据框中的一列?
- python - 尝试使用 PIMS 进行视频分析,代码在 MacOS 上有效,但在 Windows 上无效
- python - 在 LinearSVC 中检测到的类仅支持二进制分类
- rust - 使用 Neon 和 Wasm 编写 Node.js 模块之间的技术差异是什么?
- c - mmap 区域上的 memset/memcpy 失败