【发布时间】:2017-11-22 22:23:54
【问题描述】:
我试图从文件中扫描一些坐标 [X, Y, Z],但总是返回为分段错误。所以,我有一些问题要问:
我不知道文件中有多少个点,但是如果我将结构数组留空,则会出现错误。有没有办法在不定义最大数量的情况下做到这一点?
我可以使用指针吗?我对他们不是很有天赋。
我认为导致分段错误的原因是 fscanf,但我无法修复它
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define MAX 20000
FILE *f1;
struct points{
int n;
float x[MAX];
float y[MAX];
float z[MAX];
};
int main (){
int i;
struct points cart1[MAX];
f1 = fopen("point_cloud1.txt", "r");
if (f1 == NULL){
printf("Error Reading File\n");
exit (0);
}
for(i = 0; !feof(f1); i++){
fscanf(f1, "%f%f%f", &cart1[i].x[i], &cart1[i].y[i], &cart1[i].z[i]);
}
(*cart1).n = i+1;
printf("\nNumber: %d coord1: %f, %f, %f\n", (*cart1).n, (*cart1).x[0], (*cart1).y[0], (*cart1).z[0]);
fclose(f1);
return 0;
}
文件的开头是这样的:
2.84838 -1.21024 -0.829256
7.09443 -3.01579 0.134558
3.31221 -1.40868 -0.830969
7.09813 -3.01883 0.404243
4.05924 -1.72723 -0.857496
【问题讨论】:
-
1)
for(i = 0; !feof(f1); i++){:: feof() 错误 2) 为什么要分配 3*MAX*MAX 个项目? 3)20000*20000*something可能不适合堆栈。 -
(*cart1).n = i+1;仅更改第一个结构。 -
struct points cart1[MAX]数组很大。它是一个包含 20000 个点的数组,每个点有 60000 个浮点数。超过 4 GB。你确定你是故意的吗? -
如果 x,y,z 坐标属于一起,那么使用结构数组而不是数组结构可能更有意义
-
也许你应该用简单的英语告诉我们你实际上想要做什么。请edit您的问题并明确那里