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

时间:2014-06-12 12:34:07

标签: 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);
    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);

我的问题是,当我使用ptr打印printf("%s\n",ptr)时,我会得到正确的号码,例如显示第一行的第一个条目(0.52312)。但是,当我尝试将array1[lin]分配给ptr时,我会收到警告:

"assingnment makes integer from pointer without a cast"

printf("%i\n",array1[lin])

导致:&#34; 96&#34;

有人知道为什么会发生这种情况,以及如何设法读取和保存不同阵列中每一行的浮点条目?

谢谢!

1 个答案:

答案 0 :(得分:1)

在这一行:

array1[lin] = ptr;

编译器告诉所有人:array1[lin]charptrchar*