无法根据C语言中的字符数组长度分配数组

lh80um4z  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(176)

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不行呢?

a1o7rhls

a1o7rhls1#

tmp_name是可变长度数组,MSVC中不支持此类数组。
如果您希望在MSVC下工作,则需要动态分配空间。
此外,您的数组少了一个元素,因为它没有空间容纳组合字符串的终止空字节。

t40tm48m

t40tm48m2#

由于tmp_size是一个变量而不是一个固定值,因此您必须使用malloc动态分配内存,您还可以在使用完内存后使用free释放内存。

注意:您必须包含stdlib头文件才能访问malloc和free函数

#include <stdlib.h>
#include <string.h>

int my_func(char *name)
{
    char *extension = ".db";
    size_t tmp_size = strlen(name) + strlen(extension);
    char *tmp_name;

    tmp_name = malloc(sizeof(*tmp_name) * tmp_size + 1 );
    
    
    return 0;
}

在使用完阵列后释放内存*

free(tmp_name);

相关问题