尝试将多维数组分配到结构中

时间:2015-03-08 23:52:53

标签: c arrays

我在尝试将md数组分配到struct md数组时遇到了麻烦。 基本上是:

typdef struct {
  int num;
  char array[30][80];
} Vars;

然后在main中我做了一些解析来制作一个字符串数组,这个字符串是strArray,也是[30] [80]。但是,当我尝试这样做时

char strArray[30][80] = {"example", "text"};
Vars *vars = (Vars *) malloc(sizeof(Vars);
vars->array = strArray;

我一直收到错误

error: incompatible types when assigning to type ‘char[30][80]’ from type ‘char (*)[80]’

我甚至尝试在for循环中逐字符串地执行此操作,但不断收到错误。有任何想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

我不知道你要做什么,但你不能分配给数组。

你可能想要的是

#include <string.h>

size_t i;

for (i = 0 ; i < 80 ; i++)
    strcpy(vars->array[i], strArray[i]);

答案 1 :(得分:0)

Vars vars = (Vars *) malloc(sizeof(Vars);甚至没有编译。希望你的意思是:

Vars *vars = malloc( sizeof *vars );

现在,无法按值分配数组。要制作数组的副本,您必须使用可以处理数组的函数。一种方法是:

STATIC_ASSERT( sizeof vars->array == sizeof strArray );
memcpy(&vars->array, &strArray, sizeof strArray);

如果您不想复制数据,请考虑让Vars包含指针而不是数组;那么你可以在strArray处指出这一点。类型为char (*array)[80];

另一种选择是strArray实际上是Vars结构(即使你不使用num);然后你可以使用结构分配来进行复制。