C 在指针数组中存储指针时出现问题
我想逐行读一个文件。每行由504个条目组成。我想从每一行存储数组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);
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;