上一篇文章将文件读取放到静态创建的二维数组中,可是结合网络上感觉到今天的DT时代,这样批量大量读取一个上百行的数据,分配的内存是否可能由于大量的数据而产生溢出呢,近期一直研究里malloc函数。通过它来动态建立所需的二维数组。因此。通过文件操作和动态创建二维数组结合起来,将大量的数据动态的放入矩阵中,不知道这种思想是否正确,下午把程序执行出来了。将程序贴上来。欢迎大家一起探讨:对于有规律的大数据txt文档怎样高效而准确的读入数组或矩阵中呢???指教!。谢谢

程序:

#include<stdio.h>

#include<stdlib.h>

#define N 8   //8列

#define L 100  //100行

const char file_name[50] = "d:\\dat.txt";





int main(int argc, char* argv[])

{

     int row,column;

     double **data;

    int index[N] = {0};   //二维数组列下标

double temp;  

int i, j;

int count = 0;  //计数器。记录已读出的浮点数

FILE *fp;

     

row=L;

     column=N; //通过宏定义来确定行数、列数

if((fp=fopen(file_name, "rb")) == NULL) 

{

printf("请确认文件(%s)是否存在!\n", file_name);

exit(1);

}

     data=(double **)malloc(row*sizeof(double *));

     for(i=0;i<row;i++)

         data[i]=(double *)malloc(column*sizeof(double));  //动态二维数组的建立(行列限制内存大小)

    ////////将txt数据读入该动态二维数组///////////

    while(1==fscanf(fp, "%lf", &temp)) {

data[(index[count%N])++][count%N] = temp;

count++;

}



////////////////显示///////////////////

for(i=0;i<row;i++)

     {   printf("第%d行元素为: \n", i+1);

         for(j=0;j<column;j++)

         {

             //data[i][j]=i*row+j*0.01;

             printf("%5.3f ",data[i][j]);   //动态数组的成员都能够用正常的数组下标 data[i][j]

         }

         printf("\n");

     }

     free(data);   //释放内存空间。重要,可是好像写的有问题的





return 0;

}

截个效果图上来吧:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

C语言批量数据到动态二维数组的更多相关文章

  1. 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组

    学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...

  2. C++ 里 构建动态二维数组

    //****动态二维数组 /* int m=3; int **data; int n=2; data=new int*[m]; for(int j=0;j<m;j++) { data[j]=ne ...

  3. Java读取excel指定sheet中的各行数据,存入二维数组,包括首行,并打印

    1. 读取 //读取excel指定sheet中的各行数据,存入二维数组,包括首行 public static String[][] getSheetData(XSSFSheet sheet) thro ...

  4. C++动态二维数组的创建

    两种方式. 一,二级指针,创建2行3列的动态二维数组. 这里,p指向的是2个地址,这两个地址各指向长度为3的一维整型数组. 在内存中,每行元素内部顺序排列.两行元素的首地址不同,p[1]与p[2]存放 ...

  5. C++建立动态二维数组

    C++建立动态二维数组主要有两种方法: 1.使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组                           int * ...

  6. 动态二维数组赋值及for循环遍历和toString遍历

    package com.Summer_0421.cn; import java.util.Arrays; /** * @author Summer * 动态二维数组赋值及for循环遍历和toStrin ...

  7. 【C/C++】vector 动态二维数组

    声明 vector<vector<int> vec; //赋值思路可以从这个很基础的操作里看出来 vector<int> a; a.push_back(1); a.pus ...

  8. C/C++动态二维数组的内存分配和释放

    C语言: 1 //二维数组动态数组分配和释放 //数组指针的内存分配和释放 //方法一 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(ch ...

  9. 论C语言中二级指针和二维数组之间的区别

    刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...

随机推荐

  1. 所驼门王的宝藏(bzoj 1924)

    Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室 ...

  2. 利用canvas裁剪想要的图片

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. Android Win7 上使用cmd生成Jks

    Android Win7 上使用cmd生成Jks cmd 命令 C:\Program Files\Java\jre1.8.0_111\bin>keytool -genkeypair -alias ...

  4. linux 常用命令: basename 去掉路径和扩展名

      basename: 去掉路径和扩展名 /bin/basename coreutils-8.4-9.el6.x86_64 basename命令用于去掉路径信息,返回纯粹的文件名,如果指定的文件的扩展 ...

  5. poj 2892(二分+树状数组)

    Tunnel Warfare Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7749   Accepted: 3195 D ...

  6. 静态变量(static)的特点

    静态变量(static):有局部变量,也有全局变量. 静态局部变量:在函数体内用static说明的变量称为静态局部变量,属于静态类别. 特点: (1)它占据一个永久性的存储单元.随着文件的存在而存在. ...

  7. interview ms1 robert move **

    move 2turn rightmove 3turn rightmove 6 初始位置为(0,0),方向为north,求最后的位置. string2char:  const char* t = sec ...

  8. 八、Ubuntu安装Tomcat和jdk

    1.解压Tomcat 和 jdk tar -zxvf apache-tomcat-8.0.28.tar.gz tar -zxvf jdk-8u60-linux-x64.gz 2.将解压后的tomcat ...

  9. CSU 1779: 错误的算法【矩阵/模拟】

    Description 有道题目是这样的: 输入一个 n 行 m 列网格,找一个格子,使得它所在的行和列中所有格子的数之和最大.如果答 案不唯一,输出任意解即可.比如,在下面的例子中,最优解是(1,3 ...

  10. 大型网站优化-memcache技术

    大型网站优化-memcache技术 memory+cache 内存缓存 memcache简介 memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发 ...