int main(int ac, char *pav[])
{
if (ac!=2){
printf("程序名 要读取的文件名\n")
printf("test.exe 1.txt\n")
return 0
}
FILE *fp = fopen(pav[1],"r+")
if(fp == 0)
{
printf("fail to open the file1 !\n")
return 0
}
char buf[256] = {0}
while(!feof(fp))//判断文件是否已结束
{
fgets(buf,256,fp)
}
printf(buf)
return 0
}
#include<stdio.h>
#include<stdlib.h>
#define N 10000
int main()
{
FILE *fp
if((fp=fopen("D:\\123.txt","r"))==NULL)//判断文件是否打开成功
{//读取D盘下,名为123的文本文件
printf("文件打开失败\n")
exit(0)
}
else
printf("文件打开成功\n")
double a[N]
for(int i=0i<5i++)//读取五个浮点型数据
fscanf(fp,"%lf,",&a[i])//fscanf函数固定格式读取文本中的数据;
for(int i=0i<5i++)
printf("%.6lf,\n",a[i])
fclose(fp)
}
c语言没有直接读取返回数组的函数。看你问题里文件内容格式是:一行一个字符串回车换行。
那么,用fgets一次读一行,你写循环调用这个fgets函数把读取的值放在数组里。
至于你说的数组长度宽度不定,在c里需用malloc动态申请内存。
方法1:用fseek和ftell获取整个文件字节数,然后用malloc申请一个整个文件大小的内存地址(二维数组在内存中就是一维)。然后在循环中每次读取一行到这个地址并计算一行长度,利用指针移得到每行首地址,最后所有行指针组成二维数组(行数也是动态申请)
方法2:你定义一个比较大的字符数组,作为零时存储变量,每次循环中读取一行到这个数组,再用strlen计算字符串长度,再用malloc按照这个长度申请一组地址(一行),并利用strcpy转移内容,最后组成二维数组。
方法3:直接用malloc申请很大的二维数组,循环读取获取内容后,strlen获取每行实际内容的长度。最后用realloc根据实际宽度和行数修改数组大小。