2016-08-15 67 views
1

我有我打開它與數據的一堆線像這樣的文件:fscanf的哪個佔位符?

0x804ae1c: W 0x0000000c 

我想3名不同的字符串提取到3個不同的變量,但我有問題,從得到的值第二和第三個標記。

這裏是我正在努力做到這一點:

unsigned long address; 
unsigned long address2; 
char* readWrite; 
fscanf(traceFile, "%lx %s %lx\n", &address, line, &address2) 

我得到的第一行的指針。即:

804ae1c 

但之後,其他2個變量沒有得到適當的東西分配給他們。我嘗試將行改爲char,但無濟於事。我應該如何着手解決這個問題?

謝謝!

+0

試'的fscanf(跟蹤文件, 「%LX:%C%LX \ n」,&地址,&讀寫,及地址2);' – BLUEPIXY

回答

2

首先,您需要分配存儲空間,而不是僅僅聲明一個char*。如果您只閱讀單個字符,則只需簡單的char即可。

由於BLUEPIXY的評論提到,您需要考慮字符串中額外的:字符。這是一個測試程序,顯示了這一點(從標準輸入讀取)。

#include <stdio.h> 

int main(){ 
    unsigned long address; 
    unsigned long address2; 
    char readWrite; 
    int retVal; 

    retVal = scanf("%lx: %c %lx", &address, &readWrite, &address2); 
    if (retVal == 3) { 
     printf("%lu: %lu %c\n", address, address2, readWrite); 
    } else { 
     fprintf(stderr, "Parsing error\n"); 
    } 
} 
+0

即使對於學習者,使用的scanf的'返回值代碼()'到檢測成功是最好的。 – chux

+0

@chux,這是一個公平點。 – merlin2011