C 在指针数组中存储指针时出现问题

C 在指针数组中存储指针时出现问题,c,arrays,pointers,text-files,C,Arrays,Pointers,Text Files,我想逐行读一个文件。每行由504个条目组成。我想从每一行存储数组array1中的第一列,数组array2中的第二列,以及名为array3的数组中的第三列。我想存储在2D数组中的最后500个条目array4 现在我试图用指针来实现这一点,但我很难正确地存储它们 vrFile = fopen("file.txt","r"); int size = 1024, pos; int c, cdbz; char *buffervr = (char *)malloc(size);

我想逐行读一个文件。每行由504个条目组成。我想从每一行存储数组
array1
中的第一列,数组
array2
中的第二列,以及名为
array3
的数组中的第三列。我想存储在2D数组中的最后500个条目
array4

现在我试图用指针来实现这一点,但我很难正确地存储它们

vrFile = fopen("file.txt","r");

    int size = 1024, pos;
    int c, cdbz;
    char *buffervr = (char *)malloc(size);
    char *bufferdbz = (char *)malloc(size);
    int lin=0;
    char *array1, *array2, *array3, **array4;
    array1=(char *) malloc(5000*sizeof(double));
    array2=(char *) malloc(5000*sizeof(double));
    array3=(char *) malloc(5000*sizeof(double));

    array4 = malloc(5000 * sizeof(double *));
    int i;
    for(i = 0; i < 5000; i++) {
    array4[i] = malloc(nbins * sizeof(double));
    }

    tdbz = malloc(5000 * sizeof(double *));
    for(i = 0; i < 5000; i++) {
    tdbz[i] = malloc(500 * sizeof(double));
    }

    if(vrFile!=NULL) {
      do { // read all lines in file
        pos = 0;
        do{ // read one line
            c = fgetc(vrFile);
          if(c != EOF) buffervr[pos++] = (char)c;
          if(pos >= size - 1) { // increase buffer length - leave room for 0
            size *=2;
            buffervr = (char*)realloc(buffervr, size);
          }
        }while(c != EOF && c != '\n');
        buffervr[pos] = 0;
        // line is now in buffer
        //printf("%s",buffervr);
        char *ptr;
        ptr = strtok(buffervr," \t");
        int abs=1;
        while(ptr != NULL) {
            if(abs==1){
                array1[lin] = ptr;
            }
            else if(abs==2) {
                array2[lin] = atof(ptr);
            }
            else if (abs==3) {
                array3[lin] = atof(ptr);
            }
            else {
                array4[lin][abs-4]=atof(ptr);
            }
            abs++;

            ptr = strtok(NULL, " \t");

        }
            lin++;
      } while(c != EOF);
      fclose(vrFile);
    }
    free(buffervr);
结果:“96”

有人知道为什么会发生这种情况,以及我如何在不同的数组中读取和保存每行的浮点条目吗

谢谢大家!

在这一行:

array1[lin] = ptr;

编译器告诉我们:
array1[lin]
是一个
char
ptr
是一个
char*

请给出一个sscce答案。这里的代码太多了。如果要存储
double
元素,为什么要将
array1
声明为
char*
而不是
double*
?当我用double*array1声明array1时;并尝试使用array1[lin]=ptr进行读取;我也得到一个奇怪的数字(-134258688)?!我不知道这是怎么来的好的,谢谢。我该如何解决这个问题?我想我声明了array1为char*的数组
char*array1[MAX_ELEMENTS]
char**array1
和它们
malloc
。哦,我刚刚发现——不幸的是,它并没有完全正常工作。当我在将数组1[lin]分配给ptr的那一刻打印出来时,它就工作了——但当我执行for循环时,我想打印出数组[1]中的所有内容,其中包含for(I=0,I
array1[lin] = ptr;