C语言如何为二维数组的子数组正确赋值?
报错原因
C 语言不支持直接对已定义的数组使用大括号语法做整体赋值,{row, col, symbol}的初始化写法仅能在数组声明定义时使用。moves[moveCount]作为子数组的数组名,是不可修改的左值,因此直接赋值会抛出你遇到的错误。
解决方法
方案1:逐个元素赋值(全版本兼容,推荐)
直接给子数组的三个位置分别赋值即可,写法简单直观,无额外依赖:moves[moveCount][0] = row; moves[moveCount][1] = col; moves[moveCount][2] = symbol; // 赋值完成后更新落子计数,注意不要超过99避免数组越界 moveCount++;方案2:
memcpy配合复合字面量(仅支持C99及以上标准)
如果需要实现单行赋值,可以借助内存拷贝函数和C99的复合字面量实现:// 需要先引入string.h头文件 #include <string.h> memcpy(moves[moveCount], (char[3]){row, col, symbol}, sizeof(moves[moveCount])); moveCount++;
注意:两种方案都需要保证
moveCount的取值在0~99范围内,避免越界访问引发未定义行为。
内容的提问来源于stack exchange,提问作者carbaretta
相关产品推荐
相关产品推荐

