我用malloc()
创建了一个浮点数数组,如下所示:
float*x1;
x1 = (float*)malloc((vertexes/3)*sizeof(float));
if(x1 == NULL)
{
printf("Out Of Memory");
getchar(); return(1);
}
到目前为止,基于我有限的知识,似乎以上情况很好,但是当我尝试使用这样的数组时:
fscanf(stl,"%f",x1[N]);
它不起作用。
x1之后括号中的N是一个通常会递增的变量,但出于测试目的,我引用了所有这些并且只使用了数组范围内的任何数字,例如3。当我尝试这样做时,程序编译并运行正常,直到它到达fscanf
代码行。在那一刻它崩溃和窗户说它试图找到问题的解决方案。我尝试使用我的动态数组x1[3] = 12345
似乎有用,因为printf("%f",x1[3]);
输出12345
就像它应该的那样。这让我相信问题在于fscanf(stl,"%f",x1[N]);
,但我不知道为什么。
提前感谢任何建议,这是非常有用的。
答案 0 :(得分:3)
使用scanf
系列,您需要提供要填充的变量的地址,例如:
fscanf (stl, "%f", &(x1[N]));
从C11
标准7.20.6.2 The fscanf function / 12
(我的重点):
a,e,f,g:
匹配可选带符号的浮点数,无穷大或NaN,其格式与strtod函数的主题序列的预期格式相同。相应的参数应为浮动的指针。
而且,还有其他几点:
malloc
显式转换返回值并不是一个好主意。它可以隐藏某些微妙的错误,如果没有它,C将很乐意隐式转换。scanf
系列的返回值通常是个好主意,因为它会为您提供成功扫描的项目数。如果那不是你要求的,你应该采取适当的行动。