C的新手,我试图解析文件中的输入。我在获取操作和地址字段时没有问题,但是我得到了大小字段的值“32767”。
以下是导致问题的代码:
#include <stdio.h>
#include <string.h>
void read_file(char *filename)
{
// operation field, address field, size field
FILE *file = fopen(filename, "r");
char buff[25];
char operation;
long address;
int size;
char *cur_trace = fgets(buff, 25, file);
while (cur_trace) {
// read indivdual fields of trace
// if cur_trace[0] == I then ignore line
if (cur_trace[0] != 'I') {
sscanf(cur_trace, " %c %lx[^,]%*c%u", &operation, &address, &size);
printf("operation: %c\n address: %lx\n size: %u\n", operation, address, size);
}
cur_trace = fgets(buff, 25, file);
}
}
int main(int argc, char const *argv[])
{
read_file("tester.txt");
return 0;
}
这是我正在阅读的输入文字。所有以“我”开头的行都被忽略了。
I 0400d7d4,8
M 0421c7f0,4
L 04f6b868,8
S 7ff0005c8,8
答案 0 :(得分:2)
括号不是格式字符串的通用部分,它是读取字符串的特定scanf
格式代码的一部分。它不能作为一种模式放在任何地方,或用于任何其他格式。
顺便说一句,读取十六进制值将停在第一个非十六进制字符处,所以无论如何你都不需要它。只是这样做。
class1a
应该足够了(如果变量的类型是正确的。)
答案 1 :(得分:0)
问题是你的格式字符串没有解析第三个参数&amp; size,因为格式字符串。
32767值只是未初始化的垃圾。
您需要检查sscanf是否返回3,以便考虑所有参数。