我使用 malloc()
制作了一个 float 数组,如下所示:
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
代码行。那时它崩溃了,Windows 说它正在尝试找到解决问题的方法。我尝试通过放置 x1[3] = 12345
来使用我的动态数组,这似乎有效,因为 printf("%f",x1[3]);
输出了 12345
就像它应该的那样。这让我相信问题出在 fscanf(STL,"%f",x1[N]);
但我不知道为什么。
在此先感谢您的任何建议,非常感谢。
最佳答案
对于 scanf
系列,您需要提供要填充的变量的地址,例如:
fscanf (stl, "%f", &(x1[N]));
来自C11
标准7.20.6.2 fscanf函数/12
(我的重点):
a,e,f,g:
Matches an optionally signed floating-point number, infinity, or NaN, whose format is the same as expected for the subject sequence of the strtod function. The corresponding argument shall be a pointer to floating.
另外还有几点:
- 在 C 中显式转换
malloc
的返回值不是一个好主意。它可以隐藏某些细微的错误,C 会很乐意在没有它的情况下隐式转换。 - 检查
scanf
系列的返回值通常是个好主意,因为它会为您提供成功扫描的项目数。如果这不是您要求的,您应该采取适当的措施。
关于c - 为C中的动态 float 组赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221866/