fgets()没法运行读入很多行
时间: 2023-10-19 16:24:31 浏览: 50
`fgets()` 函数可以读取一行文本,但是如果需要读取多行文本,则需要使用循环来多次调用 `fgets()` 函数。以下是一个读取多行文本的示例代码:
```
#include <stdio.h>
int main() {
char line[100];
while (fgets(line, 100, stdin) != NULL) {
printf("%s", line);
}
return 0;
}
```
在这个示例中,我们循环调用 `fgets()` 函数,每次读取一行文本,直到读取到文件结尾(或遇到错误)。`fgets()` 函数将文本存储在一个字符数组中,并返回一个指向该数组的指针。如果读取到了文件结尾,则返回值为 `NULL`。我们可以使用循环来不断输出读取到的文本行,直到读取完整个文件。
相关问题
fgets()读入多行就会崩溃
`fgets()` 函数读入多行不会导致崩溃,但是可能会导致输入缓冲区溢出的问题。这是因为 `fgets()` 函数会读取指定长度的字符或者遇到 `\n` 换行符为止,如果输入的字符长度大于指定长度,就会发生缓冲区溢出。为了避免这种情况,可以使用 `fgets()` 函数读入一行后,再使用 `strlen()` 函数获取读入的字符串长度,并根据长度动态分配内存。另外还可以使用 `getline()` 函数,它可以自动分配内存并读取一行字符串,它的使用方法与 `fgets()` 函数类似。
使用fgets读文件时多读出一行
使用fgets读文件时多读出一行的原因是因为fgets函数会读取行末的换行符,而在下一次读取时,会先读取到这个换行符,导致多读出一行。解决方法是在读取每一行后,判断是否到达文件末尾,如果没有到达,则继续读取下一行,否则退出循环。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* fp;
char FlNm[] = "test.txt";
char RdStrng[1000];
fp = fopen(FlNm, "r");
if (fp == NULL) {
printf("文件读取失败");
return 1;
} else {
while (fgets(RdStrng, 1000, fp) != NULL) {
printf("%s", RdStrng);
}
fclose(fp);
}
return 0;
}
```