我有一个包含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 *。我在这里做错了什么?
答案 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;
希望这有帮助。