用 C 语言编程:"expected constant expression" Visual Studio 中的错误
programming in C: "expected constant expression" error in Visual Studio
我正在观看有关使用 C 代码对数组进行排序的 this 视频教程。与使用代码块的视频不同,我使用 Visual Studio 到 compile/run 我的代码。尝试 运行 以下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
int main()
{
int i,temp,swapped;
int howMany = 10;
int goals[howMany];
return 0;
}
我收到以下错误:
Error 1 error C2057: expected constant expression d:\temp\c tutorials\c tutorials\main.c 17 1 C Tutorials
Error 2 error C2466: cannot allocate an array of constant size 0 d:\temp\c tutorials\c tutorials\main.c 17 1 C Tutorials
我使用的代码与视频中的代码完全相同。为什么 visual studio 不会使用先前声明的 howMany
变量分配 10 位内存?
你可以这样定义,
int goals[10];
或者你可以这样修改howMany
为const
,
const int howMany = 10;
或者你可以像这样在外面定义howMany
宏,
#define howMany 10
您可以动态分配,使用malloc
或calloc
。请注意,通过这种方式,您是从堆中分配的。
#include <stdlib.h>
const int howMany = 10;
int* goals = malloc(howMany * sizeof(int));
你应该检查指针以防 malloc
失败:
if (goals == NULL){
/* Something went wrong, act accordingly */
} else{
/* Move on in here, or just don't write the else part at all */
}
然后你可以通过索引访问这个数组:
goals[0] = 2017;
如果你需要调整这个数组的大小,你可以使用realloc
。但是,在执行此操作时,首先使用一个新指针,然后再次检查它。假设您在 运行 时间内需要一个更大的数组。在这种情况下,我假设 howMany
没有被声明为 const int
所以它可以在没有一些指针 hack 的情况下重新分配。
howMany = 50;
int* temp_new_goals = realloc(goals, howMany * sizeof(int));
if (temp_new_goals == NULL){
/* Something went wrong again */
} else{
/* No problems, assign the new pointer. Don't worry, your old data remains still. */
goals = temp_new_goals;
}
最后,不要忘记free
您分配的内存。您不希望内存泄漏:
free(goals);
我正在观看有关使用 C 代码对数组进行排序的 this 视频教程。与使用代码块的视频不同,我使用 Visual Studio 到 compile/run 我的代码。尝试 运行 以下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
int main()
{
int i,temp,swapped;
int howMany = 10;
int goals[howMany];
return 0;
}
我收到以下错误:
Error 1 error C2057: expected constant expression d:\temp\c tutorials\c tutorials\main.c 17 1 C Tutorials
Error 2 error C2466: cannot allocate an array of constant size 0 d:\temp\c tutorials\c tutorials\main.c 17 1 C Tutorials
我使用的代码与视频中的代码完全相同。为什么 visual studio 不会使用先前声明的 howMany
变量分配 10 位内存?
你可以这样定义,
int goals[10];
或者你可以这样修改howMany
为const
,
const int howMany = 10;
或者你可以像这样在外面定义howMany
宏,
#define howMany 10
您可以动态分配,使用malloc
或calloc
。请注意,通过这种方式,您是从堆中分配的。
#include <stdlib.h>
const int howMany = 10;
int* goals = malloc(howMany * sizeof(int));
你应该检查指针以防 malloc
失败:
if (goals == NULL){
/* Something went wrong, act accordingly */
} else{
/* Move on in here, or just don't write the else part at all */
}
然后你可以通过索引访问这个数组:
goals[0] = 2017;
如果你需要调整这个数组的大小,你可以使用realloc
。但是,在执行此操作时,首先使用一个新指针,然后再次检查它。假设您在 运行 时间内需要一个更大的数组。在这种情况下,我假设 howMany
没有被声明为 const int
所以它可以在没有一些指针 hack 的情况下重新分配。
howMany = 50;
int* temp_new_goals = realloc(goals, howMany * sizeof(int));
if (temp_new_goals == NULL){
/* Something went wrong again */
} else{
/* No problems, assign the new pointer. Don't worry, your old data remains still. */
goals = temp_new_goals;
}
最后,不要忘记free
您分配的内存。您不希望内存泄漏:
free(goals);