在 C 中,我想将一维数组( float )导出到 CSV 文件以供其他程序打开。我编写了以下辅助函数来执行此操作:
#include <stdio.h>
#include <stdlib.h>
void float1DExportCSV(float *ptr, int n){
FILE *f;
f = fopen("FloatOutput.CSV", "w");
int i = 0;
for (i = 0; i < n-1; i++){
fprintf(f, "%f", ptr[i]);
fprintf(f, "%c", ',');
}
fprintf(f, "%f", ptr[n-1]);
}
然后我尝试在包含 10 个元素的数组上测试它,如下所示:
#define n 10
int main(void){
float array[n];
int i;
for(i = 0; i < n; i++){
array[i] = 4.3f*i;
}
float1DExportCSV(array, n);
return 1;
}
这工作正常,并且生成的文件可以正确打开。将 n
更改为更大的数字(最多 400,000 左右)也可以正常工作。
但是,在大约 500,000 个元素标记处,程序在构建时就崩溃了。我想要导出到 CSV 的数组有超过 500,000 个元素。有没有一种可靠的方法来进行这种类型的导出?像我上面使用的循环 fprintf
方法不是导出大型数据集的好方法吗?
最佳答案
当数组大小太大时,使用堆内存。
当n
太大时,在堆栈上分配数组会导致堆栈溢出。这时候,在堆上分配内存就是答案。
而不是
float array[n];
使用
float* array = malloc(n*sizeof(float));
确保释放内存。添加
free(array);
使用完数组后。
关于C:使用 fprintf 导出大型数组会使编译器崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25436562/