繁体   English   中英

使用 C 的可变长度数组

[英]Variable Length Array Used C

我正在尝试创建一个具有一定数量字符的新字符串。 我收到一条错误消息,指出“错误:使用了可变长度数组”,但我不知道为什么。 这是我的代码:

int totalSize = getTotalSize(argv[1]); // gets the number of relevant chars
char totalString[totalSize]; // here is the error 

我猜这与malloc有关? 我需要做什么? 感谢您的帮助!

编辑:我正在使用一种获取总大小的方法,因此我将无法使用宏。 这一切都在我的主要方法中完成。

更新在我发布此答案后,该问题已被编辑。 在当前形式中,数组的大小在编译时是未知的。 这需要使用 VLA(并找出错误消息的来源)、使用malloc或分配一个足够大的常量大小数组以供任何预期用途使用并且仅使用它的初始部分。 以下内容适用于最初编写的问题。

C90 要求数组的长度是一个常量表达式(可以在编译时计算的东西)。 C99 引入了可变长度数组 C11 使 VLA 成为可选的。

您的代码在 C90 中无效,在 C99 中有效,在 C11 中有条件有效。

但是鉴于您向我们展示的内容,您不需要可变长度数组。

你有:

int totalSize = 8; 
char totalString[totalSize];

totalSize不是常数。 (并将其定义为const不会使其成为常量,出于复杂的原因,我不会深入讨论。)但是数组的大小始终为 8。

你可以只写:

char totalString[8];

但那是糟糕的风格。 如果您的需求发生变化,则很难确定您必须修改的内容。

你可以这样做:

#define TOTALSIZE 8
char totalString[TOTALSIZE];

(约定是对宏名称使用全大写。)

或者您可以使用enum来创建一个名为int类型的常量:

enum { TotalSize = 8 };
char totalString[totalSize];

或者,您可能可以保持代码原样(如果totalSize的值永远不会改变,我会在totalSize的定义中添加一个const )并找出为什么会收到该诊断消息。 您没有告诉我们您使用的是什么编译器,或者消息是来自编译器还是其他工具。 在这种情况下,您当然不需要 VLA,但您仍然可以使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM