📅  最后修改于: 2023-12-03 14:59:38.631000             🧑  作者: Mango
当处理文件时,有时我们需要读取文件中的一行文本。在 C 语言中有多种方法可以实现这个功能,本文将介绍其中两种常用的方法。
C 语言提供了 fgets 函数用于读取文件中的一行文本。其函数原型如下:
char* fgets(char* str, int num, FILE* stream);
该函数从指定的流 stream 中读取最多 num - 1 个字符,并将它们存储在 str 所指向的字符数组中。函数会在以下情况停止读取:
示例代码:
#include <stdio.h>
int main() {
FILE* fp = fopen("example.txt", "r");
if (fp == NULL) {
printf("文件打开失败");
return 1;
}
char buf[1024];
while (fgets(buf, 1024, fp) != NULL) {
printf("%s", buf);
}
fclose(fp);
return 0;
}
C 语言的 GNU 版本(GCC)提供了一个名为 getline 的函数,该函数可以通过动态分配内存来读取任意长度的一行文本。其函数原型如下:
ssize_t getline(char** lineptr, size_t* n, FILE* stream);
该函数从指定的流 stream 中读取一行文本,并将其存储在指针 lineptr 指向的字符数组中。如果 lineptr 指向的数组太小,函数会为其分配足够的内存(内存大小存储在指针 n 指向的变量中)。函数成功时返回读取的字符数(不包含 null 终止符),失败时返回 -1。
示例代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* fp = fopen("example.txt", "r");
if (fp == NULL) {
printf("文件打开失败");
return 1;
}
char* buf = NULL;
size_t len = 0;
ssize_t nread;
while ((nread = getline(&buf, &len, fp)) != -1) {
printf("%s", buf);
}
free(buf);
fclose(fp);
return 0;
}
以上两种方法都可以用来读取文件中的一行文本,具体使用哪种方法取决于应用场景和个人喜好。fgets 的使用更加简单,但是不能读取任意长度的一行文本。getline 的使用稍微复杂一些,但是可以读取任意长度的一行文本。