gpt4 book ai didi

c - 在 C 中的字符串中分配时的 ASCII 字符 14(和其他)

转载 作者:行者123 更新时间:2023-12-04 08:08:37 26 4
gpt4 key购买 nike

在 GDB 中调试以下代码:

char* input = malloc(2);
input[0] = 14;
input[1] = 0;
根据 GDB,内存中字符串的值是:
input = "\016"
同样地,
char* input = malloc(2);
input[0] = 16;
input[1] = 0;
内存中的输入是 "\020" .
为什么会这样?为什么 ASCII 值 14 不映射到字符 \016 ?那么,为什么 ASCII 值 16 映射到 \020在内存中?
编辑:要添加进一步的混淆,请使用以下代码:
char* input = malloc(2);
input[0] = 20;
input[1] = 0;
通过在 gdb 中运行上述代码段并使用以下命令:
p input
打印的结果值为:
$1 = 0x604010 "\020"
这让我相信字符串输入的值是“\020”。
两个 ASCII 数字映射到相同的内容 "\020" (即 16 和 20)。

最佳答案

14写的是 016八进制(基数为八)。语法 '\016'出于历史原因使用八进制,即 60 年代的古董计算机将 6 位字符塞入 12 位、18 位甚至 36 位字中,而八进制数字似乎是 3 位组的完美表示。
可以在字符和字符串常量的 C 语法(许多语言从 C 借用)和 Unix 文件系统中的权限标志(例如:chmodumask 参数)中找到这种痕迹。16'\020' , 20'\024'32 (ASCII 空格)是 '\040''\x20' .

关于c - 在 C 中的字符串中分配时的 ASCII 字符 14(和其他),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66093614/

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