在C中为动态浮点数组赋值

时间:2013-08-14 01:36:32

标签: c arrays dynamic malloc scanf

我用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]);,但我不知道为什么。

提前感谢任何建议,这是非常有用的。

1 个答案:

答案 0 :(得分:3)

使用scanf系列,您需要提供要填充的变量的地址,例如:

fscanf (stl, "%f", &(x1[N]));

C11标准7.20.6.2 The fscanf function / 12(我的重点):

  

a,e,f,g:匹配可选带符号的浮点数,无穷大或NaN,其格式与strtod函数的主题序列的预期格式相同。相应的参数应为浮动的指针


而且,还有其他几点:

  • 从C中malloc显式转换返回值并不是一个好主意。它可以隐藏某些微妙的错误,如果没有它,C将很乐意隐式转换。
  • 检查scanf系列的返回值通常是个好主意,因为它会为您提供成功扫描的项目数。如果那不是你要求的,你应该采取适当的行动。