首页 > 解决方案 > C:创建一个变量依赖于运行时函数的静态数组?

问题描述

由于静态数组是在编译时创建的,我可以使用通过例如另一个函数获得的变量来设置数组的长度吗?我相信这取决于编译器是否可以足够聪明地知道这个变量将具有什么值?

我获得尺寸槽的示例代码snprinf()。使用带有标志的gcc编译此代码时没有错误或警告。-Wall

#include <stdio.h>
    
int main(void)
{
    int mac[6] = {0xAA,0xBB,0xCC,0xDD,0xEE,0xFF};
    int size = snprintf(NULL, 0, "%02X", mac[0]);
    char str[size + 1];

    snprintf(str, size + 1, "%02X", mac[0]);

    printf("%s\n", str);

    return 0;
}

编译运行结果如下:

AA

为什么这可能?

标签: arrayscstaticruntimecompile-time

解决方案


str不是静态数组,它是 C 语言中的 VLA,可变长度数组。


推荐阅读