什么是\ 363\353\377\377\377\177?

cpu*_*uer 5 c gdb

(gdb) p (char*)0x7fffffffe9c8
$16 = 0x7fffffffe9c8 "\363\353\377\377\377\177"
Run Code Online (Sandbox Code Playgroud)

它看起来不像ascii或multibyte,那是什么?

x4u*_*x4u 8

这些是八进制字符转义.它们通常用于将字节插入到不具有文本含义或需要具有特定二进制值的字符串中.\377例如,十六进制值ff或十进制255,这ÿ在ASCII中是这样的,但在这种情况下很可能具有非常不同的含义.

  • @cpuer:至少有两个原因.(1)它不是有效的UTF-8,并且(2)GDB在打印字符串时可能过于接受UTF-8(或者任何语言环境的多字节编码),而只是将高字节视为"二进制垃圾". (2认同)

R..*_*R.. 5

这不是文字.看起来你正在检查的地址包含另一个指向堆栈上某些东西的指针.尝试它(char **)0x7fffffffe9c8,或其他一些双指针类型.

编辑:详细说明,OP正在检查调试器中的非文本数据并询问编码.正确答案就是它不是文本.它是一个整数0x7fffffffebf3,它几乎可以肯定是一个指向字符串的指针(因为它没有对齐并指向堆栈的某个位置),这意味着原始指针可能char **不是类型char *.