#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//获取文件中有效的行数
int getFileLines(FILE *file) {
if (file ==NULL)
{
return -1;
}
char buf[1024];
int lines = 0;
while (fgets(buf,1024,file)!=NULL)
{
lines++;
//printf("%s\n",buf);
}
//将文件光标 置手
fseek(file,0,SEEK_SET);
return lines;
}
void readFileData(FILE *file ,char **pArray ,int len) {
if (file == NULL)
{
printf("读取失败\n");
return;
}
if (pArray == NULL)
{
return;
}
if (len <= 0)
{
return;
}
char buf[1024] = {0};
int index = 0;
while (fgets(buf,1024,file)!=NULL)
{
//计算开辟每个字符串的大小
int currentLen = strlen(buf)+1;
//开辟堆区空间
char * currentP = malloc(sizeof(char)*currentLen);
//将文件读取的内容 放入到开辟的空间中
strcpy(currentP,buf);
//将开辟空间的数据 放入我们维护的数组中
pArray[index++] = currentP;
//清空buf
memset(buf, 0, 1024);
}
}
//打印数组
void showFileData(char **pArray,int len) {
for (int i = 0; i < len; i++)
{
printf("%d行的数据:%s",i+1,pArray[i]);
}
}
void test01() {
//打开文件
FILE *file = fopen("./test.txt", "r");
if (file==NULL)
{
printf("文件打开失败\n");
return;
}
int len = 5; // getFileLines(file);
printf("文件有效行数为:%d\s", len);
char ** pArray = malloc(sizeof(char *)*len);
//将文件中的数据放入到pArray的数组中
readFileData(file, pArray,len);
//打印数组
showFileData(pArray,len);
}
int main() {
test01();
system("pause");
return EXIT_SUCCESS;
}

这个问题哪里出现的问题我调试多次无法解决
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- X-道至简 2022-10-10 07:08关注
这里有一个问题是 showFileData 里面len要输出5个子串,但是 readFileData 里面并没有保证读取5次以上
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用