在结构中动态分配字符串

时间:2016-10-06 18:46:10

标签: c struct malloc realloc

如果我有一个如此定义的结构:

typedef struct{

    char a[];

}my_struct_t;

如何为malloc()的字符串分配内存,使其存储在my_struct_t中?

2 个答案:

答案 0 :(得分:3)

代码可以使用灵活的数组成员在结构中存储 string 。自C99起可用。它需要struct中至少还有一个字段。

  

作为一种特殊情况,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型;这称为灵活数组成员。 ......C11§6.7.2。 18

typedef struct fam {
  size_t sz;  // At least 1 more field needed. 
  char a[];   // flexible array member - must be last field.
} my_struct_t;

#include <stdlib.h>
#include <string.h>

my_struct_t *foo(const char *src) {
  size_t sz = strlen(src) + 1;

  // Allocate enough space for *st and the string
  // `sizeof *st` does not count the flexible array member field 
  struct fam *st = malloc(sizeof *st + sz);
  assert(st);

  st->sz = sz;
  memcpy(st->a, src, sz);
  return st;
}

完全编码后,下面的语法无效。当然,各种编译器都提供语言扩展。

typedef struct{
    char a[];
}my_struct_t;

答案 1 :(得分:1)

#include <stdio.h>
#include <stdlib.h>

typedef struct {
     char* a;
} my_struct_t;


int main() 
{
    my_struct_t* s = malloc(sizeof(my_struct_t));
    s->a = malloc(100);
    // Rest of Code
    free(s->a);
    free(s);
    return 0;
}

100个字符的数组。