2012-11-14 215 views
-3

我需要通過使用C編程語言從輸入文件中讀取我的任務之一。讀取輸入文件C

這裏是我的代碼:

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

int main(int argc, char *argv[]) 
{ 
    char *input = readFromFile(argv); 
    return 0; 
} 

char *readFromFile(char *argv[]) 
{ 
    FILE *fp; 
    fp = fopen(argv[1],"r"); 
    char *input, c; 
    int i = 0; 

    while(!feof(fp)) 
    { 
     c = fgetc(fp); 
     input[i++] = c; 
    } 
    fclose(fp); 
    return input; 
} 

我想這樣做,讀取操作在另一個函數,而不是在功能main()。我嘗試過,但無法做到。

當我試着使用代碼來做到這一點上面,我得到一個錯誤,指出消息:

衝突的類型readFromFile()

我怎樣才能解決這個錯誤,並做我想做的?

+0

你」重新引用一個未初始化的指針('input')...這會崩潰。 – 2012-11-14 17:47:43

+0

'feof()'顯然是錯誤的。確保你明白這一點。直到你完成之前,不要把「C」放在你的簡歷上。 –

+0

http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong –

回答

0

您必須在使用之前聲明readFromFile。要做到這一點,最好的辦法是增加一個原型:

char *readFromFile(char *argv[]); /* note that the identifier is useless here */ 

NB:順便說一下,有一個在您的源代碼有很多其他錯誤的。主要的一點是你不會爲input分配內存。因此,您將嘗試解引用單位指針:這會導致未定義的行爲。既然你正在返回你的指針,你需要使用動態分配。

#include <stdlib.h> 
char *input = malloc(SIZE); 

而且,你的feof利用率是錯誤的。

+0

我試過了,它沒有工作。 :/ – mikrobik

+1

會有很多運行時錯誤。但是,當我在'main'函數之前添加原型時,我個人沒有編譯錯誤了。 – md5

+0

你把原型放在'main'函數上面了嗎? – prprcupofcoffee

-2

首先,你可以在這些之間進行選擇:

聲明函數原型;
2.在main之前聲明該函數。

這樣的功能在main.To公認的要快,我總是聲明函數main.In readFromFile之前,你是不是分配你需要的內存,固定爲你:

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

char *readFromFile(char *argv[]) 
{ 
    FILE *fp; 
    fp = fopen(argv[1],"r"); 
    char *input, c; 
    int i = 0; 
    size_t size=100*sizeof(char); 
    input=(char*)malloc(size); 

    while((c = fgetc(fp)) != EOF) 
    { 
     if(++i == size) 
     { 
      size+= 100*sizeof(char); 
      input=(char*)realloc(input,size); 
     } 
     input[i-1] = c; 
    } 
    fclose(fp); 
    return input; 
} 

int main(int argc, char *argv[]) 
{ 
    char *input = readFromFile(argv); 
    return 0; 
} 
+0

它的工作。 非常感謝你... – mikrobik

+0

你重新分配策略是不是非常有效的(順便說一句'的sizeof(char)的'和'malloc'投是無用的)。 – md5

+0

@Kirilenko我的再分配的策略是約CPU.You效率來講應該知道的realloc需要大量的CPU,所以不是在每一個字符重新分配,我在現代的RAM分配100 Bytes.100 B的塊什麼。關於演員陣容,這是爲了避免編譯器警告,sizeof(char)是因爲每個機器上的字符都不是1B。你應該知道這一點,每本書都會這樣做。 –