我已经读过很多关于这个的帖子,但似乎我的问题更具体一些。我想我会设法分配一个动态 2d 数组。
由于现有的代码,我必须使用一个静态数组typedef
。现在我想暂时存储未知数量的这些数组。我已经尝试了几种带有指针的变体,但我什至无法编译它。
以下代码应该解释我正在尝试做什么:
int iCount, i;
typedef unsigned char Buffer[1024];
Buffer * BufferArray=NULL;
BufferArray = malloc(iCount * sizeof Buffer*);
for(i=0;i<iCount;i++)
{
BufferArray[i] = malloc(sizeof(Buffer));
}
这是我错误最少的版本。唯一剩下的是
错误 C2106:"="左操作数必须是 l 值
我知道这个话题很乏味,而且经常发生。不过,我对typedef
感到非常困惑,它已经是一个静态数组。所以我想,这里不需要**
指针。
感谢任何帮助。
如果 typedef 让你感到困惑,那么删除它(在你的脑海中):
typedef unsigned char Buffer[1024];
所以当我们看到Buffer
时,可以把它想象成一个无符号的 char 数组 [1024]。
Buffer * BufferArray=NULL; // really it's: unsigned char[] *
现在,您希望保留未知数量的这些阵列。好吧,你并没有真正使用2D动态数组,只是一个碰巧容纳静态数组的动态数组:
typedef unsigned char Buffer[1024];
int main(void) {
Buffer * BA = NULL;
int iCount = 5;
BA = malloc(iCount * sizeof(Buffer));
BA[0][0] = 10;
return 0;
}
现在BA
是一个动态创建的数组,可用于临时保存iCount
数量的静态无符号字符数组(Buffer
)。
动态数组的元素从动态数组复制到静态数组。下面有一个简单的解决方案。
#include<stdio.h>
#include<malloc.h>
#define r 2
#define c 5
int main()
{
char *p;
char a[r][c];
int i,j;
p=(char*)malloc(r*c*sizeof(char));
gets(p);
puts(p);
while(*p!=' ')
{
for(i=0;i<=r-1;i++)
{
for(j=0; j<=c-1; j++)
{
a[i][j] =* p;
("%c",a[i][j]);
p++;
}
}
}
printf("n");
return (0);
}