乱世@小熊 2018-11-11 15:52 采纳率: 25%
浏览 361

Gdb 软阵列打印阵列

#include <stdio.h>
#include <malloc.h>
typedef struct _soft_array
{
    int len;
    int array[];//int array[0];
}SoftArray;

int main()
{  
    int i = 0;
    SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);

    sa->len = 10;

    for(i=0; i<sa->len; i++)
    {
        sa->array[i] = i + 1;
    }

    for(i=0; i<sa->len; i++)
    {
        printf("%d\n", sa->array[i]);   
    }

    free(sa);

    return 0;
}

I use gdb to print the array of sa->array,then something confuse me:

(gdb) p sa->array
$1 = 0x602014
(gdb) p *sa->array@10
$2 = {[0] = 1, [1] = 2, [2] = 3, [3] = 4, [4] = 5, [5] = 6, [6] = 7, [7] = 8, [8] = 9, [9] = 10}
(gdb) p sizeof(int)
$3 = 4
(gdb) p *(char *)0x602014@40
$4 = "\001\000\000\000\002\000\000\000\003\000\000\000\004\000\000\000\005\000\000\000\006\000\000\000\a\000\000\000\b\000\000\000\t\000\000\000\n\000\000"
(gdb)

the first method went well (I add set print array-indexes on in .gdbinit).

sizeof(int)==4,then I use p *(char *)0x602014@40,due to my computer is little-endian,so 1 display with 01 00 00 00.

When display 7,the output become a?

How does that happen or I miss something ?

转载于:https://stackoverflow.com/questions/53250451/gdb-print-array-of-soft-array

  • 写回答

1条回答 默认 最新

  • 撒拉嘿哟木头 2018-11-11 15:58
    关注

    Note that the output isn't the character 'a', but '\a'. That is the alert character, in ASCII. Just like you later get '\b' and '\t' and '\n' for the ASCII equivalents of those characters.

    This character escape reference contains a list of all standard C escape characters, together with their ASCII encoded values.

    评论

报告相同问题?

悬赏问题

  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率