如果我有一个这样定义的结构:
typedef struct{
char a[];
}my_struct_t;
如何为具有malloc()
的字符串分配内存,使其存储在my_struct_t
中?
代码可以使用灵活的数组成员FAM来存储结构中的字符串。C99起提供。它要求struct
中至少比OP的代码多一个成员。
作为一种特殊情况,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型;这被称为灵活数组成员。。。C11§6.7.2。18
typedef struct fam {
size_t sz; // At least 1 member.
char a[]; // flexible array member - must be last.
} 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.
struct fam *st = malloc(sizeof *st + sz);
assert(st);
st->sz = sz;
memcpy(st->a, src, sz);
return st;
}
正如准确编码的那样,以下内容不是有效的C语法。当然,各种编译器都提供语言扩展。
typedef struct{
char a[];
}my_struct_t;
#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个字符的数组。