gpt4 book ai didi

c - 在结构中动态分配字符串

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:06 24 4
gpt4 key购买 nike

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

typedef struct{

char a[];

}my_struct_t;

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

最佳答案

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

As a special case, the last element of a structure with more than one named member may have an incomplete array type; this is called a flexible array member. ... 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;

关于c - 在结构中动态分配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39903525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com