【问题标题】:Trouble with VLA's in CC语言中VLA的问题
【发布时间】:2016-01-21 11:43:08
【问题描述】:

我在 Mac OS X 10.11 上运行 Xcode 7.1。我试图在 C 中声明一个 VLA 数组,但我做不到。

第二次我在数组声明中使用了一个变量,它没有实际意义。未创建数组。我已经在编译器设置中进行了研究,尝试手动安装 GCC,但我无法弄清楚。谁能发现这个问题?据我了解,自 C99 以来 VLA 已成为标准,并且据我所知,我的 Xcode 正在 C11 上运行。这里有什么交易?包括代码和设置图像。

void printTriangle (int height, char rowPatterns[][height]) {

    int rowSize = 2 * height - 1;
    char rowString[rowSize]; //string to store in pattern's array
    int characterCount = rowSize; //number of character printed per row of triangle
    int asteriskCount = 1; //number of asterisks printed in each row
    int spaces = (characterCount - asteriskCount) / 2; //how many spaces need to be printed in this current row
    int rowCount;
// rest of the code...
   }

【问题讨论】:

  • 当您说声明“没有实际意义”时,您是什么意思?你得到编译器错误吗?运行时崩溃?出乎意料的结果?另外,如果你想在rowString中存储一个字符串,不应该是rowSize + 1字节来适应字符串终止符吗?
  • @DavidTamrazov 你怎么知道数组没有被创建?
  • 在调试器中查看数组有问题吗?您可以使用例如打印数组的内容吗? printf?也许调试器无法处理 VLA。真的,尝试从程序内部打印它。
  • 你有没有尝试过 rowString[0] = 'A'; printf("rowString[0] = '%c'\n", rowString[0]);?
  • 那么只是调试器不显示值。数组正常工作。

标签: c xcode c11 variable-length-array


【解决方案1】:

VLA 与任何其他局部变量一样,在您第一次使用它之前可能甚至都没有分配。现代编译器不一定在声明时分配局部变量,大多数情况下它们不会。因此,试图在声明点之后在调试器中查看 VLA 的内容是没有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多