如果我有一个如此定义的结构:
typedef struct{
char a[];
}my_struct_t;
如何为malloc()
的字符串分配内存,使其存储在my_struct_t
中?
答案 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个字符的数组。