这是我的问题: 我目前正在做一个大学项目。我们假设做一个接收.pbm和.pgm文件作为输入的程序,然后我们假设在某些方面处理它们。但目前主要是成功接收它们。 每个.pbm和.pgm文件的第一行都是“幻数”。一组字符,如P1,P2(...)P6。 我们的目标是接收一个.pbm文件作为输入,保存第一行,动态分配一个字符串,使其与其内容一样大(例如P6 \ n),这样我们就可以检测到幻数。这同样适用于其他每一行。我们基本上只想要一种方法将每一行保存到一个数组中,使它们与它们的内容一样大。 我和我的项目合作伙伴都是初学者:文件处理,指针,动态内存和标题对我们来说仍然很难。先感谢您。
---编辑---(忘记代码,正如用户指出的那样)
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 :(得分: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);
}