C++支持变长数组声明???

软件和网站开发以及相关技术探讨
回复
duanlf
帖子: 14
注册时间: 2006-08-16 14:15

C++支持变长数组声明???

#1

帖子 duanlf » 2006-09-01 22:51

闲来无事,看看Cyclone-QQ源代码
在函数里根据参数声明数组,十分不解。编写测试代码
#include <iostream>
#include <algorithm>

int main()
{
int n;
std::cin >> n;
char buf[n];
std::fill(buf, buf+n-1, '*');
buf[n-1] = '\0';
std::cout << buf << std::endl;
return 0;
}
在Ubuntu下gcc编译通过, 运行正常。

按道理,变量n的数值不定,那么编译buf不知道大小无法分配。
请高手指点
头像
lysting
帖子: 41
注册时间: 2006-07-13 11:43
来自: 深圳
联系:

#2

帖子 lysting » 2006-09-01 23:36

特意叫别人在 vc6.0帮测试,如下:

--------------------Configuration: ttt - Win32 Debug--------------------
Compiling...
ttt.cpp
D:\Documents and Settings\Administrator\ttt.cpp(8) : error C2057: expected constant expression
D:\Documents and Settings\Administrator\ttt.cpp(8) : error C2466: cannot allocate an array of constant size 0
D:\Documents and Settings\Administrator\ttt.cpp(8) : error C2133: 'buf' : unknown size
Error executing cl.exe.

ttt.obj - 3 error(s), 0 warning(s)

自己看着办吧,呵呵
duanlf
帖子: 14
注册时间: 2006-08-16 14:15

#3

帖子 duanlf » 2006-09-01 23:56

这个在vc6下不用测试,我都知道不行

问题是在ubuntu上gcc编译通过, 难道是gcc提供了支持?想不明白
kusk
帖子: 6
注册时间: 2006-05-13 20:06

#4

帖子 kusk » 2006-09-03 10:18

C99标准支持变长数组。C++目前还没有这个标准,但GCC也一并实现了。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#5

帖子 BigSnake.NET » 2006-09-03 14:11

标准的话动态分配可以实现
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
leal
帖子: 1119
注册时间: 2005-08-29 14:49
来自: 杭州
联系:

Re: C++支持变长数组声明???

#6

帖子 leal » 2006-09-04 0:15

duanlf 写了:闲来无事,看看Cyclone-QQ源代码
在函数里根据参数声明数组,十分不解。编写测试代码
#include <iostream>
#include <algorithm>

int main()
{
int n;
std::cin >> n;
char buf[n];
std::fill(buf, buf+n-1, '*');
buf[n-1] = '\0';
std::cout << buf << std::endl;
return 0;
}
在Ubuntu下gcc编译通过, 运行正常。

按道理,变量n的数值不定,那么编译buf不知道大小无法分配。
请高手指点
用 g++ 编译试试
用心×恒 | 豆瓣 | 门户 | Blog
yanxizhen
帖子: 28
注册时间: 2005-06-23 20:25

#7

帖子 yanxizhen » 2006-09-07 20:35

VLA,C99 support its.............
sorry,小生只卖身,不卖艺.
头像
fiftymetre
帖子: 37
注册时间: 2006-09-29 15:06

#8

帖子 fiftymetre » 2006-09-30 13:57

std::cin >> n;
char buf[n];

这有什么问题,编译期确定
回复