gpt4 book ai didi

c - strlen - 字符串的长度有时会增加 1

转载 作者:太空狗 更新时间:2023-10-29 16:23:18 25 4
gpt4 key购买 nike

我正在做一些 C 谜题。在大多数情况下,我都能找到正确的答案,但我遇到了问题。我使用编译器知道正确答案,但我不知道原因。

看一下代码:

char c[] = "abc\012\0x34";

如果使用标准 C 编译器,strlen(c) 会返回什么?

当我预期的是 3 时,我的编译器返回 4。

我以为 strlen() 会搜索第一次出现的 NULL 字符,但结果比我预期的多了一个。

知道为什么吗?

最佳答案

让我们写

char c[] = "abc\012\0x34";

单个字符:

char c[] = { 'a', 'b', 'c', '\012', '\0', 'x', '3', '4', '\0' };

您看到的第一个 \0 是八进制转义序列 \012 的开始,它扩展了以下八进制数字。

八进制转义序列在标准(N1570 草案)的第 6.4.4.4 节中指定:

octal-escape-sequence:
\ octal-digit
\ octal-digit octal-digit
\ octal-digit octal-digit octal-digit

它们由一个反斜杠后跟一个、两个或三个八进制数字组成。在该部分的第 7 段中,给出了八进制和十六进制转义序列的范围:

7 Each octal or hexadecimal escape sequence is the longest sequence of characters that can constitute the escape sequence.

请注意,虽然八进制转义序列的长度限制为最多三个八进制数字(因此 "\123456" 由五个字符组成,{ '\123', '4 ', '5', '6', '\0' }), 十六进制转义序列长度不限

hexadecimal-escape-sequence:
\x hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit

因此 "\x123456789abcdef" 仅包含两个字符 ({ '\x123456789abcdef', '\0' })。

关于c - strlen - 字符串的长度有时会增加 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14264458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com