我已声明已知大小的数组
typedef struct{
......
char * buffer[height+1]; //height is a constant int
......} args;
int main{
args * info;
info = malloc (sizeof(args));
char* output_buffer[width][height+1]; //width is also a constant int >= 4
output_buffer[2] = malloc (sizeof(char)*char_per_line*(height+1)); // error same as below
info->buffer = output_buffer[2]; // I know it's wrong. incompatible types in assignment
....}
数字是任意的,仅用于说明。
我正在做的是将output_buffer[width]
的地址分配给info->buffer
,然后将info
作为参数传递给线程,该线程生成数据大小为{{1 }};每个槽中都有一个长度为height+1
的cstring。这些cstrings存储在char_per_line
。
我在这里感到困惑的是,output_buffer[2]
不是output_buffer[2]
类型的指针吗?那为什么我不能将char*[height+1]
的内存地址分配给它呢?
另外,我知道我不能将数组分配给数组,但是如何让代码以所需的方式工作呢?如果解决方案是使用malloc
作为char**
,那么我该如何访问char*[height+1]
呢?
提前致谢!
答案 0 :(得分:1)
根据您指定的要求,这是您需要做的事情
/* This is a 2D array of pointers. */
char* output_buffer[width][height+1];
for ( int i =0; i< width; i++ )
for ( int j=0; j <height+1; j++ )
output_buffer[i][j] = malloc (sizeof(char)*char_per_line*(height+1));
然后,
info->buffer[SOME_VALUE] = output_buffer[SOME_WIDTH][SOME_HEIGHT];
我在这里感到困惑,不是output_buffer [2]是一个类型的指针 字符* [高度+ 1]?那为什么我不能从malloc中分配内存地址 对吗?
malloc
返回单维指针void*
,但正如您所注意到的,output_buffer [2]不是单维指针。它的类型为char*[height+1]
。 []
除了*
之外还增加了一个维度。
答案 1 :(得分:1)
不是output_buffer [2]一个char * [height + 1]类型的指针?
没有。 output_buffer[2]
是一个大小为height+1
的数组。其元素类型为char*
。
那为什么我不能从malloc中分配内存地址呢?
如您所知,您无法分配数组。
大小高度+ 1的数组;在每个槽中都是一个长度为char_per_line的cstring。
如何以期望的方式使代码工作?
如果您需要一个(height+1)
个C字符串数组,每个字符串大小为char_per_line
,则需要分配(height+1)
个大小为char_per_line
的C字符串。也就是说,致电malloc
(height+1)
次,并将char_per_line
传递给每个人。 (有一种方法可以在malloc
的一次调用中完成,但你现在可能不希望这样做。)
答案 2 :(得分:0)
typedef struct{
......
char * buffer[height+1]; //height is a constant int
......} args
这必须是
typedef struct{
......
char ** buffer; //height is a constant int
......} args
output_buffer[2] = malloc (sizeof(char)*char_per_line*(height+1));
你必须在for循环中,并且对于所有output_buffer [i] [j],(现在它是char ** = char *)。