我正在用C语言编程游戏4 in-in-a-row,用户应该输入棋盘的大小,我被允许接受的最大2D数组(棋盘)是25x25.

简而言之,我可以通过调用两个函数来初始化2D数组的大小吗?用户可以在这两个函数中输入板的大小.我收到错误消息

Variable-sized object may not be initialized

在电话线上

int arr[starting_rows()][starting_columns()] = { 0 };

推荐答案

简而言之,我可以通过调用两个函数来初始化2D数组的大小吗?用户可以在其中输入板的大小(?)

No.
Perhaps in the next version of C (C24)?

int arr[starting_rows()][starting_columns()]variable length array (VLA). C目前不允许初始化VLA.

零填满memset(arr, 0, sizeof arr).@Weather Vane

或者,定义并初始化一个最大大小的数组:int arr[25][25] = { 0 }并使用它的一个子集.@Lundin


对于OP,我建议使用第二种方法.获取用户输入并处理可能超出范围的值、不完整的输入、输入错误等,如果一切正常,则继续数组声明.

C++相关问答推荐

理解C中的指针定义

为什么静态说明符为内联函数生成外部定义?

返回一个包含数组的 struct

空指针的运行时强制转换

Can函数指针指向C++中具有不同参数连续性的函数

使用C时,Windows CMD中的argc参数是否包含重定向命令?

当我更改编译优化时,相同的C代码以不同的方式运行

C语言中的外部关键字

C-try 将整数和 struct 数组存储到二进制文件中

如何摆脱-WIMPLICIT-Function-声明

正在try 理解C++中的`正在释放的指针未被分配‘错误

无算术运算符和循环的二进制乘法

Dlsym()的手册页解决方法仍然容易出错?

在我的第一个C语言中观察到的错误';你好世界';程序

我错误地修复了一个错误,想了解原因

";错误:寄存器的使用无效;当使用-masm=intel;在gcc中,但在AT&;T模式

无法将字符串文字分配给 C 中的字符数组

macos/arm64 上地址空间不使用第一位吗?

函数的typedef是标准 C 语法吗?它与函数指针的typedef有何不同?

如何在 C 中编辑 struct 体中的多个变量