此问题在此处已有答案:
Variably modified array at file scope in C(4个答案)
4天前关闭。
当我运行代码时,我得到这个错误:
错误:总是修改'Square_Toys'在文件范围.
在我的代码顶部有一个全局定义的变量,名为NumOfToys
,然后我在它后面定义了我的数组Toy* Square_Toys[NumOfToys]
。NumOfToys
取决于用户输入的内容,所以我不能预先定义数组的大小:(
我如何才能摆脱这个错误?
int NumOfToys; // <------- This is entered through the user running the programin the terminal
struct toy * Square_Toys[NumOfToys];
字符串
3条答案
按热度按时间qrjkbowd1#
在这种情况下不能使用直接数组。可变长度数组只能在局部范围内声明。也就是说,如果数组大小是一个运行时值,那么你不能在文件范围内声明这样的数组。所有具有静态存储持续时间的数组都应具有编译时大小。没办法了
如果你的数组必须在文件作用域中声明(顺便说一句,为什么?),则必须使用指针,并使用
malloc
手动分配内存,如字符串
另一种替代方法是停止尝试使用文件范围变量,转而使用本地数组。如果数组的大小不是太大,你可以在局部范围内使用可变长度数组。
第三种选择是丑陋的混合方法:声明一个全局指针,但使用一个局部VLA来分配内存
型
但这里只是为了说明的目的。是很丑
8yoxcaq72#
NumOfToys
取决于用户输入的内容,因此我无法预先定义数组的大小您可以动态地为数组分配空间或使用VLA。对于VLA,在用户输入
NumOfToys
后,在main
中声明数组。字符串
kxxlusnw3#
全局数组的大小应该是常量,因为编译器需要在编译时知道它。如果你需要一个动态数组,在运行时用malloc分配它:
字符串