我现在有一些奇怪的错误,当扫描一个更大的文件,比如这个:
我正在使用此代码:
int *inst = (int*)malloc(sizeof(int));
int *op1 = (int*)malloc(sizeof(int));
FILE *fp = fopen(argv[1], "r");
char line [32]; // Max line size
int count=0;
while(fgets (line, sizeof(line),fp) != NULL){
sscanf(line, "%x" "%x", &inst[count], &op1[count]);
printf("0x%x 0x%x\n", inst[count],op1[count]);
count++; }
输出在开始时很好但从第7行开始变得奇怪:
从那时起,如果我添加更多行来解析所有内容,那就更奇怪了。 我是出于界限还是什么?
答案 0 :(得分:1)
问题数量
大:没有分配内存。
未使用sscanf()
不以文本模式打开文件
推荐:
// Instead of 8, make 2 passes to find the number of lines or reallocate as you go.
int *inst = calloc(8, sizeof(*inst)); /
// calloc initializes to 0, nice as your various lines don't always have 2 numbers.
int *op1 = calloc(8, sizeof(*op1));
FILE *fp = fopen(argv[1], "rt");
...
int result = sscanf(line, "%x" "%x", &inst[count], &op1[count]);
switch (result) {
case 1: printf("0x%x\n", inst[count]); break;
case 2: printf("0x%x 0x%x\n", inst[count],op1[count]); break;
default: ; // handle error
}