fscanf的哪个占位符?

时间:2016-08-15 02:21:52

标签: c

我有一个打开的文件,其中包含大量包含以下数据的行:

 0x804ae1c: W 0x0000000c

我正在尝试将3个不同的字符串提取为3个不同的变量,但是我在从第2和第3个标记获取值时遇到问题。

以下是我尝试这样做的方法:

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

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

 804ae1c

但之后其他2个变量没有分配给它们的正确的东西。我尝试将线路改为char但无济于事。我该如何处理这个问题?

谢谢!

1 个答案:

答案 0 :(得分: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");
    }
}