c - 为C中的动态 float 组赋值

标签 c arrays dynamic malloc scanf

我使用 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/

相关文章:

c - C中结构数组的静态初始化

c - 是否有新的即将推出的 C 标准来取代 C99?

arrays - 在 Swift 中将 JSON 嵌套到数组

java - 需要递归地处理数组,传递数据时遇到麻烦,java

c# - 如何删除在 asp.net 中动态创建的文本框?

c - 将 float 格式化为十进制数的算法

c++ - 在 MS-DOS 中使用长参数列表(超过 128 个字符)进行编译

c++ - 在递归函数中使用二维数组作为参数

url - StackOverflow 如何避免其 URL 中的文件扩展名和 GET 参数?

c - 函数内的动态结构数组分配