c - 保持前导零 C

标签 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)

最佳答案

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

如果您知道要将长度填充到多少位,则可以在格式字符串中指定:

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

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

关于c - 保持前导零 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8538963/

相关文章:

c - gcc 中的 -ffreestanding 选项是什么?

c - numpy/arrayobject.h 和 C 扩展

c - 输入长度未知

c++ - 为什么 getline() 不接受常量 istream?

c++ - getline 似乎无法正常工作

无法正确打印txt文件

c - 使用 fscanf 读取 ASCII 码文件

c - MinGW gcc 无法解析系统头文件

c++ - 如何在 RAND 函数中获得更小的比例

c - scanf二进制数的方法?