首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >创建不带malloc的可变大小数组

创建不带malloc的可变大小数组
EN

Stack Overflow用户
提问于 2019-06-10 21:42:01
回答 5查看 1.2K关注 0票数 0

我正在用C语言写一个程序,我想要读取一个数组长度,并创建一个这个大小的数组。但是,C语言不支持可变长度的数组,所以我想知道如何做到这一点。我不想更改我的编译器设置。

我正在考虑以某种方式使用对我有利的预处理器指令,但我还没能做到。很大程度上,我有一个包含我想要的大小的整数变量,我想用0来声明这个数组,另外,我不想使用malloc/其他动态数组方法。

这可能看起来很基本,但我已经努力了一段时间。如果这很重要,我将通过I/O接收数组大小。

EN

回答 5

Stack Overflow用户

发布于 2019-06-10 23:59:34

有几种可能的解决方案,但没有一种能满足您的所有需求。

调用malloc是显而易见的解决方案;这就是它的用途。你已经说过你不想使用malloc,但是你还没有解释为什么。

C确实支持可变长度数组--或多或少。VLA在C90中不存在,在C99中引入,并在C11中成为可选。因此,如果你想要可移植的代码,你不能假设它们是受支持的。如果是这样的话,你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int size;
// get value of size from input
int vla[size];

有一些限制。如果没有足够的内存(堆栈大小可能比堆大小更受限制),则行为是未定义的。另一方面,对于普通的固定大小的数组也是如此,VLA可以让您分配更少的内存,而不是假设一个固定的上限。VLA仅存在于块作用域,因此当控制离开封闭的块时(通常是函数返回时),对象将不复存在。

您可以定义一个数组(可能在文件范围内,在任何函数定义之外),您知道该数组足够大,可以容纳您的数据。您必须指定一些上限。例如,您可以定义int arr[10000];,然后拒绝任何大于10,000的输入。然后,您可以将该数组的初始子集用于您的数据。

你说你想创建一个“可变大小的数组”,但是你“不想使用malloc/其他动态数组方法”。听起来您想创建一个动态数组,但您并不想创建一个动态数组。这就好比你说你想拧螺丝,但你不想用螺丝刀。

票数 3
EN

Stack Overflow用户

发布于 2019-06-10 22:47:20

但是,C不支持可变长度的数组,

不对。这是完全有效的C代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int main(void)
{
    int size;
    scanf("%d", &size);
    int arr[size];
}

它被称为VLA (可变长度数组),自1999年以来一直是C语言的一部分。然而,这在C11中是可选的,但是像clang和gcc这样的大型编译器永远不会删除它们。至少在可预见的未来不会。

票数 0
EN

Stack Overflow用户

发布于 2019-06-10 23:30:11

我可以问一下:为什么您对malloc()过敏?

我这么问的原因是,许多人试图为C定义一个安全的配置文件,他们认为malloc是所有邪恶的根源。在这种情况下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int *arr;
arr = mmap(0, sizeof *arr * N, PROT_READ|PROT_WRITE, MAP_PRIVATE, -1, 0);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56533887

复制
相关文章
扫盲:”正则表达式”是什么?
我们先不解释什么是”正则表达式”,因为在本来就不明白的情况下,再去看一些专业的解释,会更加不明白。
星哥玩云
2022/06/06
6140
全球邮箱正则表达式是什么_验证邮箱的正则表达式
最近做外贸,涉及到邮箱的匹配,网上查了一下,没有合适的,因为设计到各种语言,各种格式的邮箱,就尝试自己写了,效果还可以。
全栈程序员站长
2022/09/28
9010
宝塔面板是什么?宝塔面板的作用和功能是什么?
什么是宝塔面板?宝塔面板的作用和功能是什么?宝塔面板是一款服务器管理软件,支持Windows和Linux系统,可以通过Web端轻松管理服务器,提升运维效率,该软件内置了创建管理网站、FTP、数据库、可视化文件管理器、可视化软件管理器等等。安装宝塔的目的就是更简单的管理网站服务器。解决对服务器技术不太懂的或者想用更简单的方法来管理服务器的人们。为了更好的服务这些群体,宝塔会在软件立项层面就引入交互体验。有Linux和Windows版本的。主机教程网下面给大家介绍一下。
主机教程网2bcd.com
2022/10/20
8.2K0
功能点到底是什么?
功能点(Function Points)是度量软件规模的一个标准度量单元。简单的说, 一个软件的大小可以通过交付给用户的功能点数来度量,就如一间房子的大小通过提供给用户的建筑面积或使用面积来度量一样。功能点方法是是从用户视角出发,通过量化系统功能来度量软件的规模,这种度量主要基于系统的逻辑设计。功能点规模度量方法在国际上的应用已经比较广泛,并且已经取代代码行成为主流的软件规模度量方法。功能点方法进入国内也有近15年的时间。在2013年由工业和信息化部发布的行业标准《软件研发成本度量规范》中也推荐使用功能点方法进行软件规模度量,进而对软件项目工作量、工期、成本进行估算。
嘉量云 政企软件造价专家
2021/07/22
2.3K0
java之学习正则表达式的替换功能
结果示意图 A:正则表达式的替换功能 * String类的功能:public String replaceAll(String regex,String replacement) * B:案例演示 * 正则表达式的替换功能 * 一个字符串“wo65434ai5767fen98xiang7978ba” * 替换中间的数字返回全部的字母“woaifenxiangba” 案例代码、 package com.ifenx8.regex; public class Demo_ReplaceAll { /*
吾爱乐享
2018/07/13
5160
对websocket的功能封装,构造函数是什么
url就是要连接的websocket的地址,那么可选的protocols是什么呢?protocols可以传入单个协议字符串或者是协议字符串数组。它指的是 WebSocket 服务器实现的子协议。
用户8671053
2021/09/24
5400
批量添加题目功能(正则表达式的使用案例)
右边的题目就是一个组件,根据不同的类型进行显示,这个组件这里不做谈论。这里要做的就是根据左边的文本内容,解析成一个个对象的形式,传入右边的组件进行渲染。
Daotin
2020/11/09
9360
SPSS是什么?SPSS软件的功能有哪些?
SPSS是SPSS总部于1984年推出的统计分析软件。其意义是开拓SPSS微型计算机系列产品的发展方向,极大地扩展其应用范围,并使其能够迅速应用于自然科学,技术科学和社会科学等领域。随着SPSS产品服务领域的扩大和服务深度的增加,英文名称在2000年正式更改为“统计产品和服务解决方案”。
数据前沿
2020/06/15
3.5K0
SPSS是什么?SPSS软件的功能有哪些?
【说站】python正则表达式中的分组是什么
分组的右侧可以通过分组的编号引用分组匹配的子串。而且我们可以把分组看作一个整体,分组后面可以加量词,此时量词的作用范围就是整个分组。
很酷的站长
2022/11/24
4840
移动应用性能监控是什么?其功能是什么?
对于某个公司的应用系统开发者来说,如果应用系统的性能不过关的话,就会影响到后续的正常使用,所以需要对应用进行性能的监控,如果想对应用进行性能监控的话,需要借助移动应用性能监控的帮忙,下面来为大家具体介绍移动应用性能监控的相关内容,包括其概念以及主要功能。
用户8715145
2021/12/01
7970
堡垒机的主要功能是什么?堡垒机的作用原理是什么?
互联网技术正处于不断更新迭代的过程中,而技术带动生产力的进步,因此越来越多行业的发展已经完全依赖于计算机和网络技术。这就造成了一个问题:互联网安全问题如何解决?我们经常在一些新闻中看到某某公司的信息被泄露,而这种例子已经屡见不鲜。如果是企业的重要信息,则会造成巨大的损失,甚至让企业的发展停滞不前。因此很多企业都会选择堡垒机来保证内部信息的安全。那么堡垒机的主要功能是什么?一起来了解一下吧!
用户8715145
2021/10/15
3.2K0
【说站】mysql中正则表达式是什么
最简单的正则表达式是一个普通的字符串。比如正则表达式hello只匹配字符串hello。
很酷的站长
2022/11/24
7250
【说站】mysql中正则表达式是什么
web端功能测试怎么测_web的主要功能是什么
链接是web应用系统的一个很重要的特征,主要是用于页面之间切换跳转,指导用户去一些不知道地址的页面的主要手段,链接测试一般关注三点:
全栈程序员站长
2022/09/19
5530
CleanMyMac是什么软件?有哪些功能
你知道CleanMyMac是什么吗?它的字面意思为“清理我的Mac”,作为软件,那就是一款Mac清理工具,Mac OS X 系统下知名系统清理软件,是数以万计的Mac用户的选择。它可以流畅地与系统性能相结合,只需简单的步骤就可以节省硬盘空间,提高电脑的速度,时刻保持电脑的清洁和健康,监视和优化Mac的性能。
用户7442547
2023/02/25
2.1K0
java 三大框架_java的三大框架是什么,功能各是什么
常说的三大框架指:SSH,即:Spring、62616964757a686964616fe59b9ee7ad9431333365653764Struts、Hibernate。
全栈程序员站长
2022/09/08
6190
java 三大框架_java的三大框架是什么,功能各是什么
堡垒机设备是什么 堡垒机设备的功能
堡垒机是一种是防护外来攻击,在网络中提前预警作用的一个网络安全设备。通过利用不同的科学技术去监测网络里的所有服务器、设备数据,从而可以起到安全防护行为,提前预警,方便快速地处理相关问题。下来就堡垒机设备是什么等问题给大家详细介绍下。
用户8715145
2021/10/21
1K0
TiDB 6.0 的「元功能」:Placement Rules in SQL 是什么?
对一款分布式数据库而言,数据如何分散存储在不同节点永远是个有趣的话题。你是否有时会期望能具体控制数据具体存储在哪些节点?
PingCAP
2022/04/20
4530
java之学习正则表达式的分组功能及案例
结果示意图 正则表达式的分组功能 正则表达式的分组功能 * 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 1 ((A)(B(C))) 2 (A 3 (B(C)) 4 (C) 组零始终代表整个表达式。 B:案例演示 a:切割 需求:请按照叠词切割: “feqqqnxggggggianssssgbe”; b:替换 需求:我我….我…我.要…要要…要学….学学..学.编..编编.编.程.程.程..程 将字符串还原成:“我要学编程
吾爱乐享
2018/07/13
1K0
域名服务dns的主要功能是什么 IP地址转换的好处是什么
说起网站很多人都十分熟悉,因为几乎都浏览过各种新闻网站、购物网站、游戏网站等,但对这些网站如何建设起来以及域名服务dns的主要功能是什么却毫无了解。网站的建设首先是需要一个域名,在域名的基础上构建网站,比如网站的主页,网站的各个模块等,而网站还会为了便于不同网络的用户在浏览的时候方便,采用dns功能进行解析,使得可以实现快速访问。
用户8715145
2021/11/02
2.9K0
CleanMyMac X是什么软件及功能介绍
CleanMyMac是MacPaw公司研发的Mac清理工具,具有很多功能。在选购电脑清理软件之前,确实需要了解某些程序是否安全。在我们的使用中,它不仅可以清理垃圾,而且对我们的 Mac 也不构成任何风险。其次,该应用程序也上架在 Mac App Store,Apple 已对该应用程序进行了审核,并没有发现任何可能对消费者构成风险的错误捆绑或恶意软件。
用户7442547
2022/07/30
9030

相似问题

这个正则表达式的功能是什么?

20

下面的正则表达式中'@‘符号的功能是什么

12

的功能是什么?

23

功能和功能的区别是什么?

12

“真正的”功能是什么?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文