c - 在c中初始化unsigned char数组

标签 c gdb

我有以下代码初始化一个无符号字符数组:

     unsigned char ultralightAtr[] = {0x3b,0x8f,0x80,0x01,0x80,0x4f,0x0c,0xa0,0x00,0x00,0x03,0x06,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x68}; 

当我在 gdb 中检查 ultralightAtr 时,我没有得到相同的值:

 (gdb) x/20x ultralightAtr
 0x7fffffffdd40:    0x70    0xdd    0xff    0xff    0xff    0x7f    0x00    0x00
 0x7fffffffdd48:    0x70    0x19    0xbd    0xf7    0xff    0x7f    0x00    0x00
 0x7fffffffdd50:    0x00    0xc7    0xfd    0xf7
 (gdb) 

我是在初始化数组时做错了什么,还是我在 gdb 中打印内存内容的方式有问题?

最佳答案

ultralightAtr 的地址和内容都表明它是一个具有自动存储功能的局部变量(又名在堆栈上)。您可能在 它的初始化代码在定义它的函数中运行之前使用 gdb 检查它的值。您是否刚刚在函数地址处设置了一个断点并在那里发出了 x 命令?

如果此数组未在函数中修改,您可以将其设置为static,以便在加载时而不是每次进入函数时对其进行初始化。

关于c - 在c中初始化unsigned char数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39015657/

相关文章:

在 C 中创建编号文件

c - 该程序仅解决第一行[数独]

objective-c - 从 GDB 获取值后如何编辑二进制文件

gdb - 在带有 Centos 5 的 64 位机器上使用带有 32 位二进制文​​件的 gdb 和 gdbserver 会提示内存访问或格式错误的数据

gdb - 为armv6编译gdb

c - 空格不应计入字符串长度

c - 嵌入式 C 开发的单元测试

c - 使用 splice 系统调用没有输出

linux - 通过 SSH 和 GDB 启动进程?

c - GCC 更改为小于或等于