2013-12-18 38 views
0

我想讀取一個txt文件的第一行並將其保存爲hexArray。只讀c中的一行txt

該行包含32個字符,表示一個十六進制數字。

我有以下代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include "gmp.h" 

char *saveToArray(FILE *hexFile); 

int main(int argc, char* argv) 
{ 
    char ch; 
    FILE *hexFile = fopen("hex.txt", "rb"); //recebido pela consola 
    char *hexArray = saveToArray(hexFile); 
    for(int i = 0 ; i < 32; i++) 
    {  
     printf("%c", hexArray[i]); 
    } 
    printf("\n%d", sizeof hexArray); 

    ch = getchar(); 
    return 0; 
} 

char *saveToArray(FILE *hexFile) 
//metodo que devolve uma array contendo uma linha do ficheiro 
{ 
    char hexArray[32]; 
    fgets(hexArray, sizeof hexArray, hexFile); 
    return hexArray; 
} 

這似乎是好的,但輸出顯示,事實並非如此。

請幫我解決這個問題。

謝謝! Cumps。

+0

你怎麼在輸出中看到了什麼? 你期望在輸出中看到什麼? –

+4

當'saveToArray'退出時,您將返回自動變量'hexArray'的地址,並且通過稍後解除引用該地址來調用*未定義行爲*。 – WhozCraig

+0

問題:「char hexArray []」有效*僅用於* saveToArray()函數。問:你知道字符串需要以「null」結尾,對嗎?因此,如果在「fgets()」輸入中有一個換行符,則最多隻能讀取31個字符 - 可能更少。問題:您*必須*確保字符串屬性終止。 – paulsm4

回答

1

您必須hexArraystatic或者通過這樣做:

char *saveToArray(FILE *hexFile) 
//metodo que devolve uma array contendo uma linha do ficheiro 
{ 
    static char hexArray[32]; 
    fgets(hexArray, sizeof hexArray, hexFile); 
    return hexArray; 
} 

或者,這樣做:

char hexArray[32]; 
int main(int argc, char* argv) 
{ 
    char ch; 
    ... 
+0

已解決 我是新來的C.這是一個noob錯誤。 非常感謝你 – arturataide

+2

+1或者使* hexaryray自動到*調用者*並作爲正式的參數by-address傳遞。 'char * saveToArray(FILE * fp,char * dst,size_t maxlen);' – WhozCraig

+0

@WhozCraig這也是一個非常好的主意。實際上可能更好。 –