2013-11-01 107 views
1

這是我的問題: 我目前正在進行大學項目。我們假設做一個接收.pbm和.pgm文件作爲輸入的程序,然後我們假設以某種方式處理它們。但目前主要的是成功接收它們。 每個.pbm和.pgm文件的第一行是一個「幻數」。一組字符,如P1,P2(...)P6。 我們的目標是接收一個.pbm文件作爲輸入,保存第一行,動態分配一個字符串,使其與內容一樣大(例如P6 \ n),這樣我們就可以檢測幻數。這同樣適用於其他所有生產線。我們基本上只想要一種將每行保存到數組中的方法,使它們與內容一樣大。 我和我的項目合作伙伴都是初學者:文件處理,指針,動態內存和頭文件對我們來說依然很難。先謝謝你。逐行讀取文本文件並保存到數組(C語言)

---編輯---(忘了代碼,爲用戶指出)

int main(int argc, char const *argv[]) 
{ 
    readFile(argv[1], "EI_2012-13_ascii.pbm"); 
    return 0; 
} 

void readFile (const char* input_file, char* filename){ 
    char *line_buffer, *line; 
    FILE *file_stream = NULL; 

    if(!check_extension(filename, ".pbm") && 
    !check_extension(filename, ".pgm") && !check_extension(filename, ".ppm")) 
     ERROR(ERR_EXT, "Invalid file extension!\n"); 


    file_stream = fopen(input_file, "r"); 
    if (file_stream == NULL) 
     ERROR(ERR_EXT, "Couldn't open the file for reading"); 

    line_buffer = malloc(sizeof(2)); 
    fscanf(file_stream, "%s", line_buffer); 
    //line = strchr(line_buffer, '\n'); 

    printf("%s\n", line_buffer); 
    printf("%d\n", sizeof(line_buffer)); 

    fclose(file_stream); 
} 

有了這個代碼,我們試圖輸出字符串和它下面的大小。奇怪的是,我們繼續得到相同的輸出:4.我們需要malloc接收到一個合適的參數,直到'\ n'的行的大小。

+0

http://stackoverflow.com/q/3501338/1175253 – Sam

+0

上面是你的問題描述,你沒有提到你堅持實施它的地方。 –

回答

1

可以檢測出幻數讀通過使用Linux功能getline()行文件中的行,如下圖所示,

void readFile (const char* input_file, char* filename){ 
    char *line; 
    FILE *file_stream = NULL; 
    ssize_t read; size_t len = 0; 

    file_stream = fopen(input_file, "r"); 
    if (file_stream == NULL) 
     ERROR(ERR_EXT, "Couldn't open the file for reading"); 

    while((read = getline(&line, &len, file_stream)) != 1){ 
     printf("%s", line); 
     printf("length of line: %zu\n", read); 
    } 
    if (line) 
     free(line); 
    fclose(file_stream); 
} 
+0

謝謝!這個解決方案非常棒,因爲我在linux環境下工作。 – Deegriz

+0

不客氣。 –

+0

我猜的類型。 while中的檢查條件應該是-1。 – rawatm