我有一個文件data.csv
包含float
類型的數據:與fgets不讀完整線用C
0.22,0.33,0.44
0.222,0.333,0.444
我需要將此文件讀入二維動態數組。但我無法閱讀fgets
的全文。不知道爲什麼?
這裏是我的C代碼,我在Ubuntu使用:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
float **data;
int i,j,rows=2,cols=3;
char * token;
fp=fopen("data.csv","r");
if(fp==NULL) {
fprintf(stderr,"Can't open input file");
exit(1);
}
data= malloc(rows * sizeof(float*));
char *rowbuffer=malloc(cols * (sizeof(float)+sizeof(char)));
i=0;
while(fgets(rowbuffer,sizeof(rowbuffer),fp) !=NULL) {
data[i] = malloc(cols * sizeof(float));
j=0;
printf("\n %s",rowbuffer);
for (token = strtok(rowbuffer,","); token != NULL; token = strtok(NULL, ",")) {
data[i][j++] = atof(token);
/*printf("%s",token);*/
}
i++;
}
free(rowbuffer);
for(i = 0; i < rows; i++)
free(data[i]);
free(data);
fclose(fp);
}
的輸出是這樣的:
0.22,0。
33,0.44
0.222,0
錯誤'./test「:雙重釋放或腐敗(出):0x0000000000adf270
Aborted(核心轉儲)
任何人都可以告訴爲什麼這個錯誤? :( 還是有更好的方式來讀取這種數據文件的
'sizeof(rowbuffer)== sizeof(char *)'...這可能是4或8,具體取決於硬件。由於您假設*這是分配緩衝區的大小,因此您的假設是錯誤的。 – DevSolar 2015-02-12 08:48:00
可能重複的[如何找到'sizeof'(指向數組的指針)?](http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to -an-array) – 2015-02-12 08:48:24
另外,縮進。空白空間是免費的。 ;-) – DevSolar 2015-02-12 08:53:48