1

我已经阅读了很多关于此的帖子,但似乎我的问题更具体一些。我想我会设法分配一个动态二维数组。

由于现有代码,我必须使用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:“=”左操作数必须是左值

我知道这个话题很乏味,而且经常发生。虽然,我对typedef已经是一个静态数组的 感到很困惑。所以我想,**这里不需要指针。

感谢任何帮助。

4

2 回答 2

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)。

于 2012-10-10T15:46:39.127 回答
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);
}
于 2013-06-12T18:36:46.800 回答