C语言中的一个函数在创建和分配临时数组时遇到了一些麻烦,这个函数主要是通过name参数的长度+扩展长度来创建和分配临时数组的。
int my_func(char *name)
{
char *extension = ".db";
size_t tmp_size = strlen(name) + strlen(extension);
char tmp_name[tmp_size];
return 0;
}
然而,这似乎在MSVC上不起作用,但在Clang或愚者上工作得很好。知道为什么我会得到这些错误吗:
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'tmp_name': unknown size
当我在macOS上使用Clang中的调试器时,我看到它分配和工作都很好。为什么MSVC不行呢?
2条答案
按热度按时间a1o7rhls1#
tmp_name
是可变长度数组,MSVC中不支持此类数组。如果您希望在MSVC下工作,则需要动态分配空间。
此外,您的数组少了一个元素,因为它没有空间容纳组合字符串的终止空字节。
t40tm48m2#
由于tmp_size是一个变量而不是一个固定值,因此您必须使用malloc动态分配内存,您还可以在使用完内存后使用free释放内存。
注意:您必须包含stdlib头文件才能访问malloc和free函数
在使用完阵列后释放内存*