C中的字符串动态分配

时间:2014-01-24 08:38:47

标签: c string list

我正在使用C.你能告诉我这是否是为包含字符串的struct分配内存的正确方法吗?

struct _TipoLista {
    char info[10];
    struct _TipoLista *next;
};
typedef struct _TipoLista *TipoLista;

...

TipoLista el;
el = malloc(sizeof(TipoLista));

如果尝试以这种方式创建列表,当我尝试插入第二个元素时总是会出错。但是,如果我将“信息”从char[10]更改为int,我的代码始终有效。

5 个答案:

答案 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);
}