保持前导零

时间:2011-12-16 19:08:49

标签: c getline scanf

我正在尝试从/ 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是行指针。但是当你考虑一个map文件时,它不能正确读取文件。它会降低零,它不会选择零。所以考虑一下:

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)

2 个答案:

答案 0 :(得分:2)

你正在将这些值读成整数;整数没有前导零。

如果您知道要填充长度的位数,可以在格式字符串中指定:

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

但是,如果不以不同的格式(例如字符串)存储值,则无法存储和调用前导零的确切数量。

答案 1 :(得分:1)

使用0标志(指定前导零),然后是填充长度。

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

This link 是一个很好的参考资料。