C语言 为静态数组的动态数组分配内存



我已经读过很多关于这个的帖子,但似乎我的问题更具体一些。我想我会设法分配一个动态 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);
}

相关内容

  • 没有找到相关文章

最新更新