estava tentando escrever algum código c para ler um arquivo de texto que contém algum valor hexadecimal no seguinte formato
AA
BB
CC
DD
Contendo 1 Byte de valores hexadecimais por linha no arquivo.
o seguinte é o código que usei para tentar ler 1 byte de valores hexadecimais por leitura
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
char* file_path;
FILE *fp;
uint8_t tmp_hex;
char buf[1L<<15];
int main (){
file_path = "./hex.txt";
printf("0\n");
fp = fopen(file_path, "rb");
printf("1\n");
fscanf(fp, "%02X\n", tmp_hex);
printf("2\n");
*buf = tmp_hex;
}
o código parece funcionar, print("1\n");
já que 1 é a última coisa que vejo impressa no terminal antes de receber uma mensagem de erro. segmentation fault (core dumped)
O que estou fazendo errado ao ler o arquivo de texto?
O objetivo final é ler cada byte no arquivo de texto e armazená-lo buf
para manipulação binária
fscanf(fp, "%02X\n", tmp_hex);
Você precisa passar uma referência a uma
unsigned int
variável. Então você tem 2 UBs nesta linha de código:tmp_hex
tem o tipo errado.Se
fp
isso ocorrer,NULL
ele invocará outro UB.Você quer:
fscanf(fp, "%2hhX", &tmp_hex);
Você também deve verificar o resultado das operações de E/S, pois elas podem falhar.
dado o número de questões levantadas, pensei que seria mais simples dar um exemplo trivial que espero que ajude...