2016-04-10 13 views
0

Ich lese aus Textdatei hex, aber ich möchte es in zwei Ziffern teilen?hex aus Textdatei lesen und es in c-Programm teilen

#include <studio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <string.h> 

void main() { 
    char hexa[100]; 
    FILE *fp = fopen ("data2.txt", "r+"); 
    fscanf(fp, "%s", hexa); 
    printf("\n first data = %s \n", hexa); 
    printf("\n first digit= %s \n", hexa[1]); 
    printf("\n second digit= %s \n", hexa[2]); 
    fclose(fp); 
} 

Ich lese aus der Datei erfolgreich, aber das Ergebnis ist:

first data = 16 

segmentation fault 
+0

die Aussage: '# include ' sollte sein: '# include ' – user3629249

+0

der zurückgegebene Typ aus der 'main()' Funktion ist immer 'int', kann aber' void' wenn ohne OS ausgeführt wird. Ja, ich weiß, dass 'Visual Studio' 'void' zulässt, aber das ist kein Standard – user3629249

+0

Wenn Sie die Funktion' fopen() 'aufrufen, überprüfen Sie immer (! = NULL) den zurückgegebenen Wert, um sicherzustellen, dass der Vorgang erfolgreich war. Falls nicht erfolgreich, rufen Sie 'perror (" fopen for data2.txt failed ") auf; gefolgt von: 'exit (EXIT_FAILURE);' – user3629249

Antwort

0

hexa[1] und hexa[2] Zeichen sind, aber Sie drucken sie, als ob sie Strings waren, das heißt, Zeichen-Arrays. Da sie im Bereich von 0 bis 255 liegen und dieser Speicherbereich nicht zugänglich ist, kommt es zu einem Absturz.

tun:

printf("\n first digit= %c \n", hexa[1]); 

und so weiter.

+0

danke, es hat funktioniert. – rezan

0

Ich nehme an, Sie können verwenden möchten:

printf("\n first data = %s \n", hexa); 
printf("\n first digit= %c \n", hexa[1]); 
printf("\n second digit= %c \n", hexa[2]); 

hexa zerfällt in einen Zeiger auf char und hexa[1] ist ein Zeichen. Die Argumente, die "%s" entsprechen, die von printf() erwartet werden, sind char * s, so dass hexa[1] Segmentierungsfehler verursacht. Um ein einzelnes Zeichen zu drucken, sollten Sie den Spezifizierer "%c" verwenden.

Verwandte Themen