1

我曾经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代码行。那时它崩溃了,windows说它试图找到问题的解决方案。我尝试通过 put 来使用我的动态数组,x1[3] = 12345这似乎可以工作,因为它的printf("%f",x1[3]);输出12345就像它应该的那样。这让我相信问题出在里面,fscanf(stl,"%f",x1[N]);但我不知道为什么。

提前感谢您的任何建议,非常感谢。

4

1 回答 1

3

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

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

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

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


而且,还有其他几点:

  • 在 C中显式地转换返回值不是一个好主意malloc。它可以隐藏某些细微的错误,并且 C 很乐意在没有它的情况下隐式地转换。
  • 检查家庭的返回值通常是一个好主意,scanf因为它可以为您提供成功扫描的项目数量。如果这不是您要求的,您应该采取适当的措施。
于 2013-08-14T01:38:22.047 回答