2013-11-01 103 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