在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 不映射到 char \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 文件系统中的权限标志(例如:chmod
和 umask)中找到。
参数)。
16
为 '\020'
,20
为 '\024'
和 32
(ASCII 空格)为 '\040'
或 '\x20'
。
关于c - 当在 C 中的字符串中分配时,ASCII 字符 14(和其他),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66093614/