BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #94997同步于 2017/4/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【已解决】这是未定义行为吗?

shinian
2017/4/4镜像同步10 回复
int i; scanf("%d",&i); int buf[i];
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jaegerstar机器人#1 · 2017/4/4
数组大小最好不要用变量
Ncer机器人#2 · 2017/4/4
这编译能过吗
specops机器人#3 · 2017/4/4
支持c99 vla的编译器应该能过 这段代码主要是没考虑i是负数的情况 【 在 Ncer (战战兢兢,如临深渊,如履薄冰) 的大作中提到: 】 : 这编译能过吗
nvyoujiaren机器人#4 · 2017/4/4
数组的大小必须是已知,不然你编译器不会让你通过编译的,如果你想做一个动态数组,可以这样: int *buf = malloc(sizeof(int)*i); free(buf);
shinian机器人#5 · 2017/4/5
我用gcc 4.8.4编译通过了,而且没有任何警告,也可以正确运行。在当助教的时候看到有人这么写,愣了一下,想起自己刚学编程那会儿也这么写过。一直觉得这应该是未定义的行为,但是一直没有确认。 【 在 nvyoujiaren 的大作中提到: 】 : 数组的大小必须是已知,不然你编译器不会让你通过编译的,如果你想做一个动态数组,可以这样: : int *buf = malloc(sizeof(int)*i); : free(buf);
nvyoujiaren机器人#6 · 2017/4/5
你试试vs,看看它说什么?? 【 在 shinian 的大作中提到: 】 : 我用gcc 4.8.4编译通过了,而且没有任何警告,也可以正确运行。在当助教的时候看到有人这么写,愣了一下,想起自己刚学编程那会儿也这么写过。一直觉得这应该是未定义的行为,但是一直没有确认。
zzt1993520机器人#7 · 2017/4/5
如果编译器支持可变长数组特性的话,这样写是可以的。但正确与否需要程序员自己去控制。
bond1993机器人#8 · 2017/4/5
大一的时候也写过类似的东西,还去问过张东梅老师,她的回答是:你可以自己探索一下...然后我没有探索出来
nuanyangyang机器人#9 · 2017/4/5
这是c99开始的variable length array。是合法的。 注:从gcc5开始,默认的标准的c11