【问题标题】:Assigning values to dynamic floating point array in C在C中为动态浮点数组赋值
【发布时间】:2013-08-14 01:36:31
【问题描述】:

我使用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说它试图找到问题的解决方案。我尝试通过输入x1[3] = 12345 来使用我的动态数组,这似乎有效,因为printf("%f",x1[3]); 输出12345 就像它应该的那样。这让我相信问题出在fscanf(stl,"%f",x1[N]);,但我不知道为什么。

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

【问题讨论】:

  • 没有打印错误或警告?
  • “顶点”的复数是“顶点”:)。看起来@paxdiablo 隔离了你失败的原因。
  • @mbratch,这是复数形式中的 一个,尽管它可能取决于您指的是哪个英语变体 :-) 至少在伟大的南部土地上,两者是允许的。
  • @paxiablo 我明白了。好吧,我想我已经暴露了。 ;)

标签: c arrays dynamic malloc scanf


【解决方案1】:

对于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 系列的返回值通常是个好主意,因为它可以为您提供成功扫描的项目数。如果这不是您要求的,您应该采取适当的措施。

【讨论】:

  • 谢谢你,paxdiablo,它的工作方式与现在完全一样。我只是想知道,我的方式是否尝试为指针而不是数组设置一个值?至于malloc 的事情,我不明白你的意思。我只是用谷歌搜索了如何制作动态数组,然后我复制了它并更改了参数。
  • @user1888665:关于malloc(第二个)问题,请参阅stackoverflow.com/questions/605845/…。关于第一个问题,它将采用x1[N] 的当前(任意),并将其用作填充(任意)内存块的指针。不是一个好主意:-)
猜你喜欢
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2017-07-07
  • 2012-07-11
  • 2014-10-02
相关资源
最近更新 更多