如何读取文件中的一行,而不知道它有多长(C语言)



我有一个文件("career.txt"),每一行都是这样组成的:

序列号(long int) name(string)姓(string) exam_id(string) exam_result(string);

每行可以有1到25对,由exam_id(ex: INF070)和exam_result(ex:30L)组成。

例线:333145名称姓氏INF120 24 INF070 28 INF090 R INF100 30L INF090 24

33279姓名姓氏GIU123 28 GIU280 27 GIU085 21 GIU300 R

我不知道一行中有多少对夫妇(可能有1,5或25)(所以我不能使用for循环),我必须阅读它。我怎么读整行?

我尝试使用getline和fgets,然后用strtok划分字符串,但我不知道为什么它不工作。

如果您不知道文本文件一行中的最大字符数,那么读取整行的一种方法是在读取文件时动态地为缓冲区分配内存。您可以使用getline函数来完成此操作,这是一个POSIX函数。下面是如何使用getline从文件中读取一行的示例:

#include <stdio.h>
#include <stdlib.h>
int main() {
char *buffer = NULL;
size_t bufsize = 0;
ssize_t characters;
FILE *file = fopen("file.txt", "r");
if (file == NULL) {
printf("Could not open filen");
return 1;
}
while ((characters = getline(&buffer, &bufsize, file)) != -1) {
printf("Line: %s", buffer);
}
free(buffer);
fclose(file);
return 0;
}

getline函数通过自动为缓冲区分配内存来工作,因此您不必指定固定的缓冲区大小。它接受三个参数:一个指向字符指针的指针(在本例中为& buffer),一个指向size_t变量的指针(在本例中为& buffsize),以及一个指向FILE对象的指针,该对象表示要从中读取的文件。该函数从文件中读取一行并将其存储在缓冲区中,必要时动态分配更多内存。getline函数返回读取的字符数,其中包括行尾的换行符,如果到达文件末尾则返回-1。在上面的示例中,读取并打印每一行。在完成对缓冲区的处理后释放内存是很重要的,在本例中使用free(buffer)。

相关内容

最新更新