我想逐行读取文件。每行包含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;
有人知道为什么会发生这种情况,以及如何设法读取和保存不同阵列中每一行的浮点条目?
谢谢!
答案 0 :(得分:1)
在这一行:
array1[lin] = ptr;
编译器告诉所有人:array1[lin]
是char
而ptr
是char*
。