2013-12-18 25 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这也是一个非常好的主意。实际上可能更好。 –