【问题标题】:Dynamic array size allocation动态数组大小分配
【发布时间】:2015-09-26 14:47:35
【问题描述】:

我用 C 编写了下面的代码。由于无法动态分配数组大小,因此我预计会出现错误消息。但是代码可以编译。但是 myArray1 的结果大小是荒谬的。我不确定它为什么会编译。我正在使用代码块和 minGW。

   int a;
    printf("Enter the value for a\n");
    scanf("%d",&a);
    int myArray2[a];
    printf("value of a = %d\tSize of myArray1 = %d",(sizeof(myArray2)/sizeof(myArray2[0])));

【问题讨论】:

  • 不检查规范,可能对C11有效,可能包含在GCC扩展中。
  • 这里更正 printf("value of a = %d\tSize of myArray1 = %d",a, (sizeof(myArray2)/sizeof(myArray2[0])));
  • 更安全的修正:printf("value of a = %d\tSize of myArray1 = %u",a, (unsigned int)(sizeof(myArray2)/sizeof(myArray2[0])));
  • 第二个参数应该是%zu,而不是%d%u
  • 最好当心

标签: c mingw codeblocks


【解决方案1】:

C99 标准支持堆栈上的可变大小数组。

这是上面的gcc docs

在 ISO C99 中允许使用可变长度自动数组,作为扩展,GCC 在 C90 模式和 C++ 中接受它们。这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式。存储在声明时分配,并在包含声明的块范围退出时释放。

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 2021-01-15
    • 2013-09-05
    • 2010-12-08
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多