C语言结构体中动态字符串数组
时间: 2023-07-01 08:16:38 浏览: 171
在C语言的结构体中,是可以使用动态字符串数组的。一种实现方法是使用指针和动态内存分配函数(如malloc、calloc等)来创建一个指向字符串的指针数组,然后在需要的时候动态地分配内存来存储字符串。下面是一个示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 50
typedef struct {
char **names;
int num_names;
} Person;
void add_name(Person *p, char *name) {
p->num_names++;
p->names = realloc(p->names, sizeof(char *) * p->num_names);
p->names[p->num_names - 1] = malloc(sizeof(char) * (strlen(name) + 1));
strcpy(p->names[p->num_names - 1], name);
}
int main() {
Person p;
p.names = NULL;
p.num_names = 0;
add_name(&p, "John");
add_name(&p, "Mary");
add_name(&p, "Tom");
for (int i = 0; i < p.num_names; i++) {
printf("Name %d: %s\n", i + 1, p.names[i]);
}
for (int i = 0; i < p.num_names; i++) {
free(p.names[i]);
}
free(p.names);
return 0;
}
```
在上面的代码中,我们定义了一个名为Person的结构体,其中包含一个char类型的指针指向字符串数组,以及一个int类型的变量表示数组中字符串的数量。我们定义了一个add_name函数,用于向字符串数组中添加新的字符串。这个函数首先将num_names加1,然后使用realloc函数重新分配names指针数组的内存空间,以便能够存储更多的指向字符串的指针。接下来,它使用malloc函数为新字符串分配内存,并使用strcpy函数将字符串复制到新分配的内存中。在主函数中,我们使用add_name函数向Person结构体中添加了三个字符串,然后使用for循环打印出每个字符串。最后,我们使用for循环和free函数释放了动态分配的内存。
阅读全文