2016-04-10 30 views
0

我正在從文本文件中讀取十六進制數,但是我想將其拆分爲兩位數?從文本文件讀取十六進制並將其拆分到c程序中

#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); 
} 

我成功地從文件中讀取,但結果是:

first data = 16 

segmentation fault 
+0

聲明:'#包括'應該是:'#包括' – user3629249

+0

從'主()'函數總是'int'返回類型,但可以'void'如果沒有操作系統上運行。是的,我知道'visual studio'允許'void',但調用函數fopen()時,這不是標準的 – user3629249

+0

,總是檢查(!= NULL)返回的值以確保操作成功。如果不成功,請調用'perror(「fopen for data2.txt failed」);後面是:'exit(EXIT_FAILURE);' – user3629249

回答

0

hexa[1]hexa[2]是人物,但你打印它們,好像它們是串,那就是字符數組。由於它們的範圍在0-255之間,並且此範圍的內存不可訪問,所以會發生崩潰。

這樣做:

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

等。

+0

謝謝,它的工作。 – rezan

0

我想你可能要使用:

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

hexa衰減到字符指針,並hexa[1]是一個char。由printf()預期的對應於"%s"的參數是char * s,因此傳遞hexa[1]會導致分段錯誤。要打印單個字符,您應該使用"%c"說明符。

相關問題