#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int getFileLines(FILE* fp) {
if (fp == NULL) {
return -1;
}
char buf[1024] = { 0 };
int count = 0;
//按行读文件
while (fgets(buf, sizeof(buf), fp)) {
//printf("%s", buf);
count++;
}
//将文件指针放回初始位置
fseek(fp, 0, SEEK_SET);
return count;
}
void readFileData(FILE* fp, int len, char** pArray) {
if (fp == NULL) {
return;
}
if (len <= 0) {
return;
}
if (pArray == NULL) {
return;
}
char buf[1024] = { 0 };
int index = 0;
while (fgets(buf, sizeof(buf), fp)) {
int currentLen = strlen(buf) + 1; //补上\0的长度
char* currentStrP = (char*)malloc(sizeof(char*) * currentLen);
strcpy(currentStrP, buf);
pArray[index] = currentStrP;
index++;
memset(buf, 0, sizeof(buf));
}
}
void showFileData(char** pArray, int len) {
for (int i = 0; i < len; i++) {
printf("第%d行的数据为%s", i + 1, pArray[i]);
}
}
void test() {
FILE* fp = fopen("./test.txt", "r");
if (fp == NULL) {
printf("打开失败\n");
return;
}
//统计有效行数。会移动文件指针,别忘了放回初试位置。
int len = getFileLines(fp);
char** pArray = (char**)malloc(sizeof(char*) * len);
//读取数据放入pArray
readFileData(fp, len, pArray);
//读取数据
showFileData(pArray, len);
free(pArray);
pArray = NULL;
fclose(fp);
}
int main() {
test();
return 0;
}
09-02