【发布时间】:2014-10-06 23:33:20
【问题描述】:
我正在创建大小在运行时定义的静态字符数组。而且我没有收到编译错误。
这怎么可能?
这是我的例子:
void f(const string& val) {
char valBuf[val.size() + 1]; strcpy(valBuf, val.c_str());
cout << valBuf << endl;
}
int main() {
string str = "aaaa";
f(str);
return 0;
}
【问题讨论】:
-
一些编译器有这个扩展。如果你在严格的 C++ 模式下编译,它应该会产生错误。
-
可变长度数组是一个 c99 特性 but several compilers include it as an extension,可能是重复的。
-
是的,这通常仅在 C99 及更高版本中可用。
-
如果不需要改字符串,可以使用
const char *p = val.c_str(); -
我最近问了几个关于 VLA 的问题:1.stackoverflow.com/q/24981392/1382251。 2.stackoverflow.com/q/24989715/1382251。您可能会发现他们的答案很有用..