Держите ведущие нули C

Я пытаюсь прочитать адреса памяти из / proc // maps, и я использую следующий код

for (ptr = NULL; getline(&ptr, &n, file) > 0;) { if (ptr[0]== ' ') { continue; } sscanf(ptr, "%lx-%lx", &r0, &r1); printf("r0: %lx, r1: %lx\n", r0, r1); } 

Предположим, что файл указывает на / proc // maps & ptr – указатель на линию. Но когда вы рассматриваете файл карт, он не читает собственно файл. Он опускает ноль, он не выбирает нули. Поэтому рассмотрим:

 00110000-00123000 r-xp 00000000 08:01 129925 /lib/i686/cmov/libnsl-2.11.1.so 

После выполнения моей программы:

 r0: 110000, r1: 123000 

Как я держу ведущие нули, чтобы вывести что-то вроде этого:

 r0: 00110000, r1: 00123000 

Изменить: printf предназначен для отладки.

Вот что я делаю с r1 позже

 mem = mmap(NULL, 4096, PROT_READ, MAP_PRIVATE, mem_fd, r1) 

Вы читаете эти значения в целые числа; целые числа не имеют начальных нhive.

Если вы знаете, сколько цифр вы хотите отложить до длины, вы можете указать это в строке формата:

 printf("r0: %08lx, r1: %08lx\n", r0, r1); 

Невозможно сохранить и вспомнить точное количество ведущих нhive без сохранения значения в другом формате (например, в строке).

Используйте флаг 0 (который указывает ведущие нули), а затем дополненную длину.

 printf("r0: %08lx, r1: %08lx\n", r0, r1); ^^ ^^ 

Эта ссылка является хорошей ссылкой для просмотра.