1
leavic 2014-05-16 16:48:12 +08:00
你printf看一下content的长度
|
2
leavic 2014-05-16 16:50:25 +08:00
我感觉content是一个指向指针的指针,而不是一个数组,所以不需要分配空间.
|
3
aszxqw 2014-05-16 16:50:38 +08:00
编译器在作怪。
|
4
jkneedout 2014-05-16 16:53:50 +08:00
#define iVar 5
顺便贴下你看到的开源代码地址吧 |
5
leavic 2014-05-16 16:55:47 +08:00
啊,我想起来了,这种用法我也写过,我是直接char Buff[200],不需要Malloc.
直接写char *content[iVar]是可以自动分配空间的,但在这个函数结束之后,这部分内存会被回收,而且你无法在定义他的函数之外访问它,malloc的意义是建立一个可以被公共访问的指针,如果你只在一个函数内使用这个数组,用完就不管,是可以不用malloc的. 而且,有些时候其实你没法控制这个数组的消亡时间,不知道在什么地方去free他,用malloc反而会造成内存无法回收. |
6
leavic 2014-05-16 16:57:14 +08:00
至于建立数组的时候,长度不能是变量只能是常量的问题,我只能说是编译器的问题,有些编译器现在真的可以支持变量做长度.
|
7
mulog 2014-05-16 16:58:31 +08:00
C99
https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C90 mode and in C++. These arrays are declared like any other automatic arrays, but with a length that is not a constant expression. The storage is allocated at the point of declaration and deallocated when the block scope containing the declaration exits |
8
LMkillme 2014-05-16 17:02:23 +08:00
可以这样写,C99支持的,初始化时就决定数组大小了,之后你改变ival的值也不行。
|
9
LMkillme 2014-05-16 17:02:52 +08:00 1
gcc支持,g++不支持
|
10
chchwy 2014-05-16 17:39:19 +08:00
C99最新的標準, 另外這是C跟C++不相容的地方。
|
11
danny106 OP |
12
ChiangDi 2014-05-16 17:55:35 +08:00
VLA,好像叫变长数组。
|
13
sandtears 2014-05-16 18:36:35 +08:00
这不就是 C99 标准么,C99 允许直接用变量定义数组长度。
如果你用的 gcc, 那么编译的时候指明 `-std=c99` 就行了 |