在C语言中,有一个函数存在问题,它基本上是通过名称参数的长度和扩展名长度来创建和分配临时数组。
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 或 GCC 上可以正常工作。任何想法为什么我会得到这些错误:
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'tmp_name': unknown size
使用macOS上的Clang调试器,我看到它可以分配内存并正常工作。为什么在MSVC上不行呢?
MAX_PATH
或pathconf
确定。使用malloc
分配它。使用snprintf
将内容写入该缓冲区。 - Cheatah_alloca
。这样,内存将自动释放。 - Andreas Wenzel