2017-06-13 4 views
0

Ich versuche, eine sehr einfache Datei von Daten zu lesen, die wie folgt aussieht:Sementation Fehler mit fscanf()

1597 1 0 3 1 

mit dem folgenden Code:

void boot(){ 
FILE *f = fopen("shutdown.txt", "r"); 
    uint8_t timestamp = 0; 
    uint8_t power_down_type = 0; 
    uint8_t power_down_cause = 0; 
    uint8_t boot_number = 0; 
    uint8_t antenna_deployed = 0; 
    uint8_t images_captured = 0; 

    fscanf(f, "%u %d %d %d %d %d", &timestamp, &power_down_type, &power_down_cause, &boot_number, &antenna_deployed, &images_captured); 

    printf("timestamp: %u\n", timestamp); 
    printf("power_down_type: %d\n", power_down_type); 
    printf("power_down_cause: %d\n", power_down_cause); 
    printf("boot_number: %d\n", boot_number); 
    printf("antenna_deployed: %d\n", antenna_deployed); 
    printf("images_captured: %d\n", images_captured); 
} 

Aber wenn ich das laufen Code, ich bekomme einen SEGV-Fehler. Kann mir jemand helfen zu verstehen, was ich hier falsch mache? Vielen Dank!

+1

'"% u "' erwarten ein 'unsigned'. 'uint8_t' ist kein' unsigned'. Verwende '"% hhu "'. Weitere Informationen finden Sie in der 'fscanf()' Dokumentation. – chux

Antwort

1

%d liest ein int und %u eine unsigned int liest, von denen beide sind größer als uint8_t. Undefiniertes Verhalten tritt auf, indem die Größe der Variablen überschrieben wird. %hhu sollte für uint8_t verwendet werden.