【问题标题】:How can I set the size of char [] with int [closed]如何使用 int [关闭] 设置 char [] 的大小
【发布时间】:2026-01-07 18:40:01
【问题描述】:

我想创建一个char foo[] 并将大小设置为int,但它根本不起作用!

}else{
    int start = match[1].rm_so;
    int end = match[1].rm_eo;
    char value[end-start];
    ...
}

value的大小总是0,这是为什么呢?

谢谢

【问题讨论】:

  • end-start 的值是多少?
  • 那么startend的值是多少?
  • 你是如何计算value的大小的?
  • 还有一个烦人的问题,您确定您使用的是符合 C99 标准的编译器吗?一种接受变长自动数组的吗?
  • 您能否创建一个Minimal, Complete, and Verifiable example 并编辑您的问题以包含它?

标签: c char size sizeof


【解决方案1】:

您应该为此使用 malloc。

char *value = malloc( (end-start) * sizeof(char))

使用 malloc 时,请记住在使用完数组后释放内存。

 free(value)

如果您需要更多信息,请在此处查看更多信息:C Dynamic memory allocation

【讨论】:

  • 你可能是对的,但 end 和 start 很容易成为宏。
  • 是的,但它有什么改变吗?它们仍然是整数值,对吧?
  • 在这种情况下,它们是常量值,那么原始语法对任何版本的 C 都有效。严格的 C99 及更高版本也应该接受他的语法,即使它们是易变的。
  • 啊,是的,我明白了。所以我们需要提问者来帮助我们。
  • 在这种情况下,更好的解决方案是使用 VLA。除非绝对必须使用 malloc,否则请避免使用它。
【解决方案2】:

它不起作用,因为您正在根据旧的 C90 标准编译 C 代码。在该标准中,数组大小必须是编译时常量。在现代 C 中,有一种称为可变长度数组 (VLA) 的东西,它允许您使用变量来声明数组,就像您的示例一样。

请注意,VLA 必须在本地范围内声明,您不能在文件范围内(“全局”)声明它们。

因此,最好的解决方案是获取现代编译器,例如 GCC,然后将其编译为标准 C 代码:gcc -std=c99 -pedantic-errors

【讨论】: