Keep Leading Zéros C

J’essaie de lire les adresses mémoire de / proc // maps et j’utilise le code suivant

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); } 

Supposons que le fichier pointe vers / proc // maps & ptr est le pointeur de ligne. Mais lorsque vous considérez un fichier de cartes, il ne le lit pas correctement. Il supprime le zéro, il ne détecte pas les zéros. Alors considérez:

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

Après avoir parcouru mon programme:

 r0: 110000, r1: 123000 

Comment je garde les zéros au début pour produire quelque chose comme ceci:

 r0: 00110000, r1: 00123000 

Edit: Le printf est pour le débogage.

Voici ce que je fais avec r1 plus tard

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

    Vous lisez ces valeurs en nombres entiers; les entiers n’ont pas de zéros en tête.

    Si vous savez combien de chiffres vous souhaitez append à la longueur, vous pouvez le spécifier dans votre chaîne de format:

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

    Il n’y a aucun moyen de stocker et de rappeler le nombre exact de zéros non significatifs sans stocker la valeur dans un format différent (par exemple, une chaîne).

    Utilisez l’indicateur 0 (qui spécifie les zéros non significatifs), suivi de la longueur complétée.

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

    Ce lien est une bonne référence à regarder.