初始化二维字符数组

2023-12-09

我试图用这个颂歌初始化二维字符数组

int x=4;
int y=4;
char plg[x][y]={{"o","o","o","o"},{"o","o","o","o"},{"o","o","o","o"},{"o","o","o","o"}};

但是这段代码会抛出错误error: excess elements in char array initializer|我搜索了一段时间,一切都表明这是处理二维字符数组的正确方法。为什么会抛出错误?


在 C 中,不能使用动态表达式作为全局变量的数组大小。自 C99 标准以来,局部变量是可能的,但这些数组称为VLA无法初始化。

出于您的目的,您必须直接使用文字常量或常量表达式指定大小。您可以使用宏来增加可读性,但这是一个坏主意#define x 4像这样的短标识符x可能会在程序的其他地方使用,并且也会被替换,从而导致模糊的错误。

您无法初始化二维数组char每个人都有一个字符串char,您可以这样使用字符文字:

char plg[4][4] = {
    {'o','o','o','o'},
    {'o','o','o','o'},
    {'o','o','o','o'},
    {'o','o','o','o'}
};

或者您可以使用字符串文字来初始化数组的最后一层:

char plg[4][4] = {"oooo", "oooo", "oooo", "oooo" };

请注意,虽然您可以使用以下命令删除内部大括号char文字初始化器是这样的:

char plg[4][4] = {'o','o','o','o','o','o','o','o','o','o','o','o','o','o','o','o' };

不可能以这种方式合并字符串初始值设定项:

char plg[4][4] = { "oooooooooooooooo" }; // warning: initializer-string for char array is too long

上面的语法仅初始化第一个子数组'o's,剩下的 3 个初始化为'\0's

If you really如果需要动态大小,您将需要以其他方式初始化数组:

void myfunc(int x, int y) {
    char plg[x][y];
    int scores[x][y];

    // you can initialize char arrays this way
    memset(plg, 'o', sizeof(plg));

    // you need a loop for other types
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++) {
            scores[i][j] = 1;
        }
    }
    ...
}

您仍然需要小心使用此功能:您必须检查用户输入,避免在自动存储(又名在堆栈上)。足够大或可能为负值x or y将调用未定义的行为。只允许使用较小的值,通常小于 256。对于更通用的解决方案,您需要分配plg从堆中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化二维字符数组 的相关文章

随机推荐

  • 使用reactjs中的props更改更新状态值

    我有一个模式组件 应该在 setState 更改时调用 但由于某种原因它没有更新 在第一个文件中 我在渲染中设置以下内容
  • 致命错误:调用未定义的函数 mysql_connect() [重复]

    这个问题在这里已经有答案了 我收到此错误 Fatal error Call to undefined function mysql connect in var www html test1 php on line 8 对于以下代码
  • 如何缓存 angularjs 部分?

    在 angularjs 生产中缓存部分的最简单 现代的方法是什么 目前代码如下 routeProvider when error templateUrl partials error html controller ErrorCtrl 其中
  • Python 使用正则表达式解析 HTML

    我正在尝试浏览网站的 HTML 并解析它以查找班级的最大注册人数 我尝试检查 HTML 文件的每一行中的子字符串 但这会尝试解析错误的行 所以我现在使用正则表达式 我有 t t t t t t t td class odd 0 9 0 9
  • Django:注释每个对象的重复值数量的计数

    我有一个名为 Product 的模型 如下所示 产品可以具有相同的字段 bc sku class Product models Model bc sku models IntegerField null True blank True pr
  • 图书馆?静止的?动态的?还是框架?项目在另一个项目中

    我有一个现有的 iOS 应用程序 并且想要添加大量代码 这些代码是我作为另一个项目开发的 只是为了便于测试 新块基本上涉及将图像保存到各种共享服务等 因为共享代码需要大量测试和未来更新 所以我想知道将该代码块合并到我现有的应用程序中的最佳方
  • Code First 和 EF 5.0 不加载导航属性

    我正在尝试通过 Code First 和 EF 5 0 加载导航属性子对象加载为 null 下面是代码 Table ls roles public class Role Required Key public int RoleID get
  • 如何将 Double[] 转换为 double[]?

    我正在实现一个接口 其功能类似于可以包含某种类型的对象的表 该接口指定了以下功能 double getDoubles int columnIndex 让我困惑的是 在我的实现中 我将表数据存储在二维中Object array Object
  • 如何使用 Python 创建 Word 文档? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想使用 Python 创建 Word 文档 但是 我想尽可能多地重复使用现有的文档创建代码 我目前正在使用 XSLT 生成 HTML 文件以编程方
  • 如何在 PostgreSQL 中快速将二维数组取消嵌套到一维数组中?

    我有一个使用 Apache Madlib 计算的非常大的数组 我想对该二维数组中的每个数组应用一个操作 我找到了可以帮助我解除嵌套的代码这个相关答案 然而 在这个非常大的 2d 数组 150 000 1d float 数组 上 代码非常慢
  • 从数据帧中删除单变量异常值(+-3 SD)

    我对 R 很陌生 以至于我很难在其他人的问题中找到我需要的东西 我认为我的问题太简单了 以至于没有人费心去问 创建一个新数据框的最简单的代码是什么 该数据框排除单变量异常值的数据 我将其定义为距离其条件平均值 3 个 SD 的点 在其条件内
  • 在文本框中反向书写

    我想像乌尔都语一样在文本框中以相反的顺序输入 是否有任何输入属性来做到这一点或任何代码 方向 rtl 只从末尾开始 但输入文本是原来的 它不会反转在文本框中查找 只需使用简单的 CSS input type text text align
  • 如何检测 Web 应用程序是否正在 Electron 中运行

    我正在尝试在电子应用程序上提供真正的反应应用程序 这并不意味着我正在使用 React 开发电子应用程序 我创建了一个反应应用程序并将其注入到电子应用程序中 与 Slack 一样 它将充当 Web 应用程序和桌面应用程序 但我对发送桌面通知感
  • istream >> ostream << 使用 * 指针重载运算符

    如果 gt gt 和 在标题中 friend std istream operator gt gt std istream ins Classname e friend std ostream operator lt lt std ostr
  • 如何根据确定的属性值对 JavaScript 中的对象数组进行排序?

    所以我有这个通知对象数组 必须按严重性降序排序 即Error gt Warning gt Information Example var notificationArray code 103 severity Error code 104
  • Java switch语句多种情况

    只是想弄清楚如何在 Java switch 语句中使用多种情况 这是我正在尝试做的一个例子 switch variable case 5 100 doSomething break 与必须做的事情相比 switch variable cas
  • 给定年、月、日、周数如何查找日期?(基于Sql Server 2005集)

    给定年 月 日 周数 如何查找日期 例如 year 2010 month Feb day Wed week number 4 how can I find that the date is 24 02 2010 Thanks 尝试这个 gi
  • 在 Spring Security Oauth2 中使用 RemoteTokenServices 配置资源服务器

    我正在尝试使用 spring security oauth2 实现授权服务器和资源服务器 到目前为止 我已经成功设置了授权服务器 并且由于我不想共享 jdbc 令牌存储 所以我尝试使用 remoteTokenService 来验证我的令牌
  • 为什么这个数据绑定不起作用?

    我有一个包含点列表的 ViewModel 类 我试图将其绑定到折线 折线拾取初始点列表 但即使我实现了 INotifyPropertyChanged 也不会注意到何时添加其他点 怎么了
  • 初始化二维字符数组

    我试图用这个颂歌初始化二维字符数组 int x 4 int y 4 char plg x y o o o o o o o o o o o o o o o o 但是这段代码会抛出错误error excess elements in char