我正在使用C.你能告诉我这是否是为包含字符串的struct
分配内存的正确方法吗?
struct _TipoLista {
char info[10];
struct _TipoLista *next;
};
typedef struct _TipoLista *TipoLista;
...
TipoLista el;
el = malloc(sizeof(TipoLista));
如果尝试以这种方式创建列表,当我尝试插入第二个元素时总是会出错。但是,如果我将“信息”从char[10]
更改为int
,我的代码始终有效。
答案 0 :(得分:2)
el = malloc(sizeof(*el));
或
el = malloc(sizeof(struct _TipoLista));
或在声明结构时初始化
struct _TipoLista {
char info[10];
struct _TipoLista *next;
}obj1;
在前两种情况下,动态内存分配3是静态内存分配
答案 1 :(得分:1)
el = malloc(sizeof(*el));
TipoLista具有指针的大小,这不是你真正想要的。
答案 2 :(得分:0)
您应该尝试以下
el = malloc(sizeof(struct _TipoLista));
或者为这个结构定义一个typedef。
答案 3 :(得分:0)
您正在尝试执行typedef,即结构的别名。 Typedef反过来意味着“从这一点开始* struct _TipoLista *将被称为* TipoLista ”
如果你想要一个类型为“struct _TipoLista”的链表,那么这可能有所帮助。
struct _TipoLista {
char info[10];
struct _TipoLista *next;
};
typedef struct _TipoLista TipoLista;
int main()
{
TipoLista *Tptr = malloc(sizeof(TipoLista) );
/** Rest is history */
}
答案 4 :(得分:0)
希望这可能有用:
typedef struct {
char info[10];
struct _TipoLista *next;
} TipoLista;
TipoLista* construct_lista()
{
TipoLista* ret = malloc(sizeof(TipoLista));
ret->next = NULL;
return ret;
}
void destruct_lista(TipoLista* lista)
{
TipoLista* next;
while (lista != NULL)
{
next = lista->next;
free(lista);
lista=next;
}
}
void insert_into_list(TipoLista* lista, char* element)
{
while (lista->next != NULL)
lista = lista->next;
lista->next = construct_lista();
strcpy(lista->next->info, element);
}