Для хранения результата вам потребуется 64-битное целое число.
32-битные системы
В 32-битной системе тип long
может иметь длину только 32 бита.
Конечно, вы можете использовать long long
тип для address
.
Лучше, будет использовать uint64_t
тип (определенный в stdint.h
на c99)
Изменения
- Измените
address
тип на long long
(при необходимости) - Измените
%x
на %lx
(для long
) или %llx
(для * 1027)*) (два места) - Компилировать с включенными предупреждениями.
Предупреждения
При включенных предупреждениях вы должны получить сообщение:
warning: format ‘%x’ expects argument of type ‘unsigned int’,
but argument 3 has type ‘long int’ [-Wformat=]
fprintf(stderr,"address: %x\n",address); // DEBUG stmnt
~^ ~~~~~~~
%lx
Что дает вам хорошую подсказку для решения вашей проблемы.
Итак, ваш код должен выглядеть так:
#include <stdio.h>
int main(void)
{
char buffer[10];
char *pattern = " %c %lx,%s\n";
int status;
unsigned long address; char op;
while ((status = scanf(pattern, &op, &address, buffer)) != EOF) {
fprintf(stderr,"address: %lx\n",address);
}
return 0;
}
С вашим вводом я получаю результат:
address: 600aa0
address: 4005b6
address: 7ff000398
address: 7ff000390