2016-08-18 4 views
0

У меня есть следующий код, который инициализирует массив беззнаковых символов:Инициализировать массив символов без знака в с

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

Когда я инспектировать ultralightAtr в GDB не получить то же значение:

(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?

+4

Не могли бы вы разместить соответствующий код и последовательность команд gdb, которые вы использовали? – EOF

+5

* Когда вы рассматриваете массив? Где массив? Является ли это локальной переменной внутри функции? Можете ли вы показать нам [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) вашей программы? Вы нигде не перезаписываете массив? –

+0

Вам нужно запустить код, по крайней мере, в начале 'main()', чтобы код инициализации c запущен и инициализирован 'ultralightAtr'. Вы это сделали или работаете, сразу после загрузки программы? –

ответ

3

Как адрес, так и содержание ultralightAtr указывают, что это локальная переменная с автоматическим хранением (ака в стеке). Вы, вероятно, изучите его значение с помощью gdb до, его код инициализации запускается в функции, где он определен. Вы только что установили точку останова на адрес функции и выдали команду x?

Если этот массив не изменен в функции, вы можете сделать его static, поэтому он инициализируется во время загрузки, а не каждый раз, когда вводится функция.

+0

Да, это локальная переменная, извините за то, что вы не поняли этого. Задача статической решена. Благодаря! –