所以我正在从逗号分隔的文件中读取值并将其分配给一维双精度数组。以下是我用来实现此目的的方法:
double* readFile(char *fileName)
{
FILE *fp = fopen(fileName, "r");
char *token;
int i = 0;
int j = 0;
double *retval = (double *)malloc(5000 * sizeof(double));
if(fp != NULL)
{
char line[10];
while(fgets(line, sizeof line, fp) != NULL)
{
//printf("Parsed line: %s\n", line);
token = strtok(line, ",");
while(token != NULL)
{
printf("token: %s\n", token);
*retval = atof(token);
printf("value: %d\n",*retval);
retval++;
token=strtok(NULL,",");
}
}
fclose(fp);
} else {
perror(fileName);
}
for(j = 0; j < i; j++)
{
retval--;
}
return retval;
}
我得到的问题是,在我分配了标记化值的atof()之后,这是正确的,指针中保存的值绝对不正确。例如,我有一个只是全零的文本文件,并且在数组中保存的是每个位置的-1587604999等疯狂值。
有人看到了这个问题吗?
答案 0 :(得分:1)
您正在使用%d
格式说明符来表示double。您应该尝试%f
。
答案 1 :(得分:1)
retval
已提升,现在指向下一个可用位置。
您希望保存原始malloc
值并返回该值。
也可能存在其他问题,例如调用者如何知道值的结束位置?此外,如果您获得超过5000个值,该怎么办?此外,出错时可用内存。但我认为这只是你的测试代码,你最终会解决这些问题。