http://www.cnblogs.com/pangyujie/archive/2011/09/28/2194730.html
C语言变长数组
变长数组是C99标准里面的内容,支持C99标准的编译器都能正确的编译含变长数组的C程序。以前一直用VC,只能使用定长数组。当时也用过指针来模拟变长数组,但是比较麻烦,且使用指针的话是在堆中开辟内存空间,效率上会有影响。
测试代码
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int main(int argc, char *argv[])
6 {
7 const char *head = "headstr-";
8 const char *tail = "tailstr";
9 char vla[strlen(head) + strlen(tail) + 1];
10 strcpy(vla, head);
11 strcat(vla, tail);
12 printf("%s\n", vla);
13
14 int i;
15 for(i = 0; i < 5; ++i)
16 {
17 char foo[i + 2];
18 strncpy(foo, "xxxxxxxxxxx", i + 1);
19 foo[i + 1] = '\0';
20 printf("%s\n", foo);
21 }
22
23 return 0;
24 }
使用GCC(Windows下MinGW32环境)可正常编译:
使用VC的编译器cl.exe,报错(VS2008下同样报错):
posted on 2011-09-28 18:58 Pang Yujie 阅读(185) 评论(8) 编辑 收藏
评论
#1楼
既然是C99
写成
for(int i = 0; i < 5; ++i )
岂不更好 回复 引用 查看
#2楼
查看
#3楼
查看
#4楼
好像除了VC不支持C99,其他编译器都支持了吧 回复 引用 查看
#5楼
查看
#6楼
下面,自己看
Microsoft Visual Studio No As of Visual Studio 2010, there are no plans to support C99.[11][12] 回复 引用 查看
#7楼
查看
#8楼
VC支持的确实很差
但单行注释// (前面写错了) 是C99的 回复 引用 查看
变长数组是C99标准里面的内容,支持C99标准的编译器都能正确的编译含变长数组的C程序。以前一直用VC,只能使用定长数组。当时也用过指针来模拟变长数组,但是比较麻烦,且使用指针的话是在堆中开辟内存空间,效率上会有影响。
测试代码
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int main(int argc, char *argv[])
6 {
7 const char *head = "headstr-";
8 const char *tail = "tailstr";
9 char vla[strlen(head) + strlen(tail) + 1];
10 strcpy(vla, head);
11 strcat(vla, tail);
12 printf("%s\n", vla);
13
14 int i;
15 for(i = 0; i < 5; ++i)
16 {
17 char foo[i + 2];
18 strncpy(foo, "xxxxxxxxxxx", i + 1);
19 foo[i + 1] = '\0';
20 printf("%s\n", foo);
21 }
22
23 return 0;
24 }
使用GCC(Windows下MinGW32环境)可正常编译:
使用VC的编译器cl.exe,报错(VS2008下同样报错):