2011-12-16 85 views
1

我試圖讀取存儲器地址從/ proc //地圖和我使用下面的代碼保持前導零ç

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 //映射& PTR是行指針。但是當你考慮一個地圖文件時,它不會讀取適當的文件。它降低零點,它不會選擇零點。所以考慮:

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

通過我的程序運行後:

r0: 110000, r1: 123000 

我如何保持前導零輸出是這樣的:

r0: 00110000, r1: 0

編輯:printf的是進行調試。

這是我做的R1以後

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

您是否需要r0和r1作爲數字 - 也許您可以將數據視爲字符串 – Mark 2011-12-16 19:14:22

+2

這看起來像Python僞裝成C :) – pmg 2011-12-16 19:22:43

回答

1

使用0標誌(指定前導零),其次是填充長度。

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

This link是一個很好的參考一下。

2

你正在讀取這些值爲整數;整數不具有前導零。

如果你知道你有多少個數字要墊出的長度,你可以指定你的格式字符串:

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

有沒有辦法來存儲和調用前導零的確切數量,而不存儲儘管如此,不同格式的值(例如,一個字符串)。