我已经阅读了大量关于此的帖子,但似乎我的问题更具体一些。我想我会设法分配一个动态的二维数组。
由于现有代码,我必须使用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
非常困惑,**
已经是一个静态数组。所以我想,这里不需要{{1}}指针。
感谢任何帮助。
答案 0 :(得分:2)
如果typedef让您感到困惑,那么将其删除(在脑中):
typedef unsigned char Buffer[1024];
因此,当我们看到Buffer
时,将其视为[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
)。
答案 1 :(得分:0)
如果要将动态数组的元素从动态数组复制到静态数组。有一个简单的解决方案。
#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!='\0')
{
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);
}