malloc-an char数组

时间:2014-11-06 02:00:16

标签: c arrays char

我有一个包含char数组的结构:

typedef struct{
  char *name[128];
} arr;

我以为我之前读过,为此分配内存的正确方法是:

arr thisOne;
thisOne->name = malloc(sizeof(char) * 128);

但是,这会导致错误:

incompatible types when assigning to type ‘char *[128]’ from type ‘void *’

尝试从malloc转换返回没有帮助,因为当我需要char * [128]时,我只是得到一个char *。我在这里做错了什么?

3 个答案:

答案 0 :(得分:4)

好吧,name是一个指向char的指针数组。您可能需要一个字符串,因此需要一个指向char的指针:

typedef struct{
  char *name ;
} arr;


arr thisOne;
thisOne.name = malloc(sizeof(char) * 128);

在这种情况下,包括字符串的最大大小是明智的:

typedef struct{
  char *name ;
  size_t max ;
} arr;

答案 1 :(得分:0)

thisOne.name = malloc(sizeof(char)*(128 + 1));

+1代表'\ 0'

答案 2 :(得分:0)

这完全取决于你正在尝试做什么;

只需要清理几件事。如果您声明arr的实例。使用.运算符访问成员。例如; thisOne.name = X。下列;如果thisOne->name是指向内存中thisOne实例的指针,arr将起作用。

好。根据您的实现,它似乎是电话;

malloc (sizeof (char) * 128)

将128个字符(128 * 8位)的内存分配到内存中。如果结构是这样的话,这很好;

typedef struct {
    char * name;
} arr;

但是,您的结构实际上声明了一个包含128个char指针的数组,这与您的malloc语句冲突。如果这实际上是你的意图那么你的malloc调用应该是这样的;

thisOne.name = (char **) malloc (sizeof (char *) * 128);

使用以下结构。

typedef struct {
    char ** name;
} arr;

希望这有帮助。