使用c中函数的int值定义arraysize

时间:2019-03-19 19:39:25

标签: c arrays function dynamic dynamic-arrays

我想使阵列更加灵活。我的输入来自一个文件。我从函数中获得了数组需要多大的信息。

我的代码示例如下:

int albumsize = getAlbumnumberFromFile(inputFile);
struct Album Alben[albumsize];

现在我必须关注以下问题……我不能做这样的事情。我的IDE(Visual Studio 2017)提示此错误:

  

表达式必须具有恒定值

谢谢 亚历克斯

3 个答案:

答案 0 :(得分:2)

尽管C标准允许可变长度数组(VLA),但Visual Studio编译器并不完全符合标准(相关的Q&A)。

但是,即使支持VLA,我也不鼓励在这种情况下使用VLA,因为足够大的albumsize可能导致不确定的行为。

一种更好的方法是动态分配内存,如下所示:

struct Album *Alben = malloc(albumsize * sizeof(*Alben));
... // Use the allocated memory here. Once you are done, free it.
free(Alben);

请注意,Alben-指针和Alben-数组之间的一个重要区别是您从sizeof获得的内容:数组将报告其数据大小,而指针仅报告指针的大小。因此,您需要保留albumsize的值-例如,在循环中迭代数组。

答案 1 :(得分:0)

Microsoft不支持任何远程现代C标准。 C99中引入了可变长度数组,但是MSVC仍然停留在C89上。您将需要创建一个静态大小足以容纳所需内容的数组,或者malloc一个适当大小的数组。

答案 2 :(得分:0)

MSVC不是C编译器。它是具有某些C兼容性的C ++编译器。据我所知,微软没有提供纯C编译器。

由于VLA(可变长度数组)不是C ++标准的一部分,因此它们是C标准的一部分(甚至是可选的),MSVC决定不支持它们。您必须为数组使用动态内存分配,我承认这不是很方便。