【发布时间】:2022-11-13 10:53:51
【问题描述】:
在 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写入该缓冲区。
标签: c