使用 c 中函数的 int 值定义 arraysize
define arraysize using an int value from a function in c
我想让我的阵列更灵活。我的输入来自一个文件。我从一个函数中得到了我的数组需要多大的信息。
我的代码示例如下所示:
int albumsize = getAlbumnumberFromFile(inputFile);
struct Album Alben[albumsize];
现在我必须解决以下问题......我不能做这样的事情。我的 IDE (Visual Studio 2017) 说这个错误:
expression must have a constant value
谢谢
亚历克斯
Microsoft 不支持任何远程现代 C 标准。 C99 中引入了可变长度数组,但 MSVC 仍然停留在 C89 上。您将需要创建一个足够大的静态大小的数组来容纳您可能需要的任何内容,或者 malloc 一个适当大小的数组。
MSVC 不是 C 编译器。它是一个具有一定 C 兼容性的 C++ 编译器。据我所知,微软没有提供纯C编译器。
由于 VLA(可变长度数组)不是 C++ 标准的一部分,它们是 C 标准的一部分(即使在那里也是可选的)MSVC 决定不支持它们。你将不得不为你的数组使用动态内存分配,我承认这不是很方便。
尽管 C 标准允许可变长度数组 (VLA) Visual Studio 编译器并不完全符合标准(相关 Q&A)。
但是,我不鼓励在这种情况下使用 VLA,即使它们受到支持,因为足够大 albumsize
可能会导致未定义的行为。
更好的方法是动态分配内存,如下所示:
struct Album *Alben = malloc(albumsize * sizeof(*Alben));
... // Use the allocated memory here. Once you are done, free it.
free(Alben);
请注意,Alben
-the-pointer 和 Alben
-the-array 之间的一个重要区别是您从 sizeof
获得的内容:数组将报告其数据的大小,而指针将单独报告指针的大小。出于这个原因,您需要保留 albumsize
的值 - 例如,为了在循环中迭代数组。
我想让我的阵列更灵活。我的输入来自一个文件。我从一个函数中得到了我的数组需要多大的信息。
我的代码示例如下所示:
int albumsize = getAlbumnumberFromFile(inputFile);
struct Album Alben[albumsize];
现在我必须解决以下问题......我不能做这样的事情。我的 IDE (Visual Studio 2017) 说这个错误:
expression must have a constant value
谢谢 亚历克斯
Microsoft 不支持任何远程现代 C 标准。 C99 中引入了可变长度数组,但 MSVC 仍然停留在 C89 上。您将需要创建一个足够大的静态大小的数组来容纳您可能需要的任何内容,或者 malloc 一个适当大小的数组。
MSVC 不是 C 编译器。它是一个具有一定 C 兼容性的 C++ 编译器。据我所知,微软没有提供纯C编译器。
由于 VLA(可变长度数组)不是 C++ 标准的一部分,它们是 C 标准的一部分(即使在那里也是可选的)MSVC 决定不支持它们。你将不得不为你的数组使用动态内存分配,我承认这不是很方便。
尽管 C 标准允许可变长度数组 (VLA) Visual Studio 编译器并不完全符合标准(相关 Q&A)。
但是,我不鼓励在这种情况下使用 VLA,即使它们受到支持,因为足够大 albumsize
可能会导致未定义的行为。
更好的方法是动态分配内存,如下所示:
struct Album *Alben = malloc(albumsize * sizeof(*Alben));
... // Use the allocated memory here. Once you are done, free it.
free(Alben);
请注意,Alben
-the-pointer 和 Alben
-the-array 之间的一个重要区别是您从 sizeof
获得的内容:数组将报告其数据的大小,而指针将单独报告指针的大小。出于这个原因,您需要保留 albumsize
的值 - 例如,为了在循环中迭代数组。