2016-08-15 5 views
1

私はこのようなデータを持つ行の束を持って、私は開いているファイルがあります:私は3つの異なる変数に異なる3つの文字列を抽出しようとしているが、私はから値を取得する問題を抱えているfscanfのどのプレースホルダですか?

0x804ae1c: W 0x0000000c 

を2番目と3番目のトークン。

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

私は、最初の行のポインタを取得:ここ

は、私はそれをやろうとしている方法です。すなわち

804ae1c 

ですが、それ以降は他の2つの変数が割り当てられた適切なものを取得しません。私はcharへの行を変更しようとしましたが、無駄です。この問題をどのように解決する必要がありますか?

ありがとうございます!

+0

試み '関数fscanf(のtraceFile、 "%のLX:%Cの%LXする\ n"、&アドレス、および読み書き、およびアドレス2);' – BLUEPIXY

答えて

2

まず、char*を宣言するのではなく、ストレージを割り当てる必要があります。 1文字だけを読む場合は、単純なcharで十分です。

BLUEPIXYのコメントには、文字列内に余分な文字が含まれています(:)。ここにこれを示すテストプログラムがあります(stdinから読み込みます)。

#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

関連する問題