|
发表于 2020-11-9 13:27:32
|
显示全部楼层
本楼为最佳答案
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- char *readLine(FILE *file) {
- if (file == NULL) {
- exit(1);
- }
- /* malloc linebuffer */
- int baseLen = 256; // 初始长度设置256字符
- char *lineBuf = (char *) malloc(sizeof(char) * baseLen);
- if (lineBuf == NULL) {
- exit(1);
- }
- int ch, index = 0;
- do {
- ch = fgetc(file);
- lineBuf[index] = ch;
- index++;
- if (index == baseLen) {
- baseLen += 256;
- lineBuf = (char *) realloc(lineBuf, baseLen); // 内存不足时每次再重新分配256字符空间
- if (lineBuf == NULL) {
- exit(1);
- }
- }
- } while (ch != 10 && ch != EOF);
- lineBuf[index] = '\0'; // end of string add '\0'
- if (EOF == ch) {
- lineBuf[index-1] = '\0';
- }
- return lineBuf;
- }
- int main(int argc, char *argv[]) {
- FILE *fp = fopen("../main.c", "r");
- if (fp == NULL) {
- exit(1);
- }
- while (!feof(fp)) {
- char *line = readLine(fp);
- printf("%s", line);
- }
- exit(0);
- }
复制代码 |
|